ThinkPHP6.0 数据迁移工具 migration 入门使用教程

news2025/1/9 2:04:33

文章目录

  • 安装数据库迁移工具
  • 创建迁移文件
  • 执行迁移
  • 回滚
  • 参考资料

开始前需要做好的准备工作:

  • 搭建好 PHP 开发环境(推荐 phpstudy,PHP>=7.2.5,MySql5.7.x)。
  • 安装好 ThinkPHP6.0,并做配置可正常连接到 MySql 数据库。
  • 安装好 Composer。

安装数据库迁移工具

使用 Composer 安装数据库迁移工具:

composer require topthink/think-migration

安装成功后,通过php think list查看相关指令:
Alt text
上面截图中红色框线区域为数据库迁移相关指令。我们常用的其中的三个:

  • migrate:create 创建一个迁移
  • migrate:rollback 回滚
  • migrate:run 执行迁移

下文我以用户表为例进行介绍。

创建迁移文件

  • 首先通过migrate:create指令生成一个迁移脚本(含基础代码结构的文件)

    php think migrate:create User
    

    执行成功的结果如下:
    Alt text
    我们可以看到,执行结果是在项目根目录多一个database/migrations目录,来存放迁移脚本文件,文件名格式YYYYMMDDHHMMSS_my_new_migration.php,前 14 个字符就是当前时间戳(精确到秒),后面就是自定义的迁移名称。

  • 修改迁移脚本内容
    上文自动创建的迁移脚本文件只是一个框架文件,并没有具体实现。我们可以在这个文件中编码来创建新表、插入数据、增加索引和修改字段等。其中有一个空方法change,我们就在这个方法内进行迁移。

    • 修改前的迁移脚本文件内容:
    <?php
    
    use think\migration\Migrator;
    use think\migration\db\Column;
    
    class User extends Migrator
    {
        /**
        * Change Method.
        *
        * Write your reversible migrations using this method.
        *
        * More information on writing migrations is available here:
        * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
        *
        * The following commands can be used in this method and Phinx will
        * automatically reverse them when rolling back:
        *
        *    createTable
        *    renameTable
        *    addColumn
        *    renameColumn
        *    addIndex
        *    addForeignKey
        *
        * Remember to call "create()" or "update()" and NOT "save()" when working
        * with the Table class.
        */
        public function change()
        {
    
        }
    }
    
    

    旧版本中updown方法,而目前最新版本只需要在change方法中定义up的代码逻辑,不需要定义down方法,因为回滚的时候新版本会自动识别。

    注意:change方法存在的时候,updown方法会被自动忽略。如果你确实想用这些方法,你可以创建另外一个迁移文件。

    • 定义迁移文件内容如下:
    <?php
    
    use think\migration\Migrator;
    use think\migration\db\Column;
    
    class User extends Migrator
    {
        /**
        * Change Method.
        *
        * Write your reversible migrations using this method.
        *
        * More information on writing migrations is available here:
        * http://docs.phinx.org/en/latest/migrations.html#the-abstractmigration-class
        *
        * The following commands can be used in this method and Phinx will
        * automatically reverse them when rolling back:
        *
        *    createTable
        *    renameTable
        *    addColumn
        *    renameColumn
        *    addIndex
        *    addForeignKey
        *
        * Remember to call "create()" or "update()" and NOT "save()" when working
        * with the Table class.
        */
        public function change()
        {
            $table = $this->table('user', ['engine' => 'MyISAM', 'comment' => '用户表']);
            $table->addColumn('username', 'string', ['limit' => 15, 'default' => '', 'comment' => '用户名,登陆使用'])
                ->addColumn('password', 'string', ['limit' => 32, 'default' => md5('123456'), 'comment' => '用户密码'])
                ->addColumn('login_status', 'boolean', ['limit' => 1, 'default' => 0, 'comment' => '登陆状态'])
                ->addColumn('login_code', 'string', ['limit' => 32, 'default' => 0, 'comment' => '排他性登陆标识'])
                ->addColumn('last_login_ip', 'integer', ['limit' => 11, 'default' => 0, 'comment' => '最后登录IP'])
                ->addColumn('last_login_time', 'datetime', ['default' => 0, 'comment' => '最后登录时间'])
                ->addColumn('is_delete', 'boolean', ['limit' => 1, 'default' => 0, 'comment' => '删除状态,1已删除'])
                ->addIndex(['username'], ['unique' => true])
                ->create();
        }
    }
    
    

    代码解析:

    • addColumn() 方法创建字段
    • addIndex() 方法创建索引
    • create() 方法创建表
    • update() 方法更新表
      特别注意: 当在 change() 方法中创建和更新表时,必须使用 create() 或者 update() 方法。因为当使用 save() 方法无法识别是创建还是修改数据表。
  • Mysql 表支持的选项:

    • 语法:$this->table('表名(不含前缀)', ['选项配置'])
    • 支持的选项:
      • comment 设置表注释
      • engine 设置表的引擎(默认为 InnoDB)
      • collation 定义表的字符集(默认为 utf8mb4_unicode_ci)
      • signed 定义主键是否有符号(默认为 false,及默认无符号)
      • limit 定义主键字段的长度限制
      • id 和 primary_key 设置主键相关
        • 迁移工具会为每个表自动创建一个自增的主键字段 id。
        • id选项会自动创建一个唯一字段。
        • primary_key选项设置哪个字段为主键,默认值为 id
        • id 将始终覆盖 primary_key 选项,除非它设置为 false
        • 如果将 id 设置为 false,且未指定 primary_key,则不会创建主键。
        • 设置单个 primary_key 则不会启用 AUTO_INCREMENT 选项。
        • 如果只是要简单修改主键名称,将id选项的值设置为新主键名称即可。
  • Mysql 列支持的选项:

    • 语法:$table->addColumn('列名称', '列类型', ['选项配置'])
    • 支持的列类型:
      • binary
      • boolean
      • char
      • date
      • datetime
      • decimal
      • float
      • double
      • integer
      • biginteger
      • string
      • text
      • time
      • timestamp
      • uui
      • enum
      • set
      • blob
      • tinyblob
      • mediumblob
      • longblob
      • bit
      • json
    • 支持的选项:
      • comment 设置列注释
      • null 是否允许 NULL 值,默认为不允许
      • default 设置列的默认值
      • collation 定义表的字符集(默认为 utf8mb4_unicode_ci)
      • signed 定义主键是否有符号(默认为 false,及默认无符号)
      • limit 定义文本或者整型的长度限制
      • length 是 limit 的别名
      • after 指定字段创建的位置
  • 创建索引

    • 语法:$table->addIndex(['列1', '列2', '...'], ['选项配置'])
    • 支持的选项:
      • 默认创建的是普通索引
      • unique 设置为 true ,表示创建唯一索引
      • name 设置索引名称

执行迁移

执行迁移就是执行上文在change方法中定义的逻辑,执行成功就会在数据库创建或更改相关数据表。

  • 运行所有可用的迁移脚本
php think migrate:run
  • 设定--target(简写:-t)选项来运行指定版本号的迁移脚本
php think migrate:run -t 20230624030338
  • 设定--date(简写:-d)选项来运行指定日期的迁移脚本
php think migrate:run -d 20230624

选项-d的值实际经测试支持年(2023)年月(202306),上例中年月日(20230624)运行无效果。

回滚

回滚命令用于撤消 Phinx 以前执行的迁移。

  • 不带参数的回滚命令,可回滚到上一次迁移。
php think migrate:rollback
  • 设定--target(简写:-t)选项来回滚指定版本号的迁移
php think migrate:rollback -t 20230624030338

注意

  • 实际测试发现选项-t指定完成版本号无法执行成功,指定部分版本号反而可以运行成功;
  • 指定 0 为目标版本将撤销所有迁移。
  • 设定--date(简写:-d)选项来回滚指定日期的迁移
php think migrate:rollback -d 20230624

选项-d的值实际经测试只支持年月日(20230624)

参考资料

  • 原项目手册(英文):phinx
  • 网络资料(仅做参考):Phinx 数据库迁移中文文档.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker安装nginx,发布部署vue项目

场景 前后端项目&#xff0c;实现前后端简单部署到服务器。前端vue&#xff0c;后端springboot。服务器ubuntu&#xff08;18.04&#xff09;<linux系统同理>. 后端通过(nohup java -jar xxx.jar &) 指令简单部署。该文主要说明部署前端vue项目。 部署vue需要安装ng…

一文看懂51单片机和stm32区别,怎么用怎么学怎么选

一文看懂51单片机和stm32区别&#xff0c;怎么用怎么学怎么选 对于初学单片机的童鞋而言&#xff0c;开始会有这样的疑问&#xff1f;到底选哪个怎么选呢&#xff1f; 1、工业控制51优于stm&#xff1f; 2、没区别,51就是个入门级,不过也有贵的,我用的就是51,用的还可以&…

PG系列4:linux下编译安装PG15

文章目录 一. 源码安装1.1 下载并解压1.2 安装依赖包1.3 开始编译安装1.4 创建用户1.5 创建目录及修改权限1.6 设置环境变量1.7 初始化数据库1.8 启动和关闭数据库 二. 验证2.1 查看数据库后台进程2.2 验证和登陆数据库2.3 查看数据库版本2.4 查看数据库运行状态2.5 修改白名单…

Sangfor华东天勇战队:h2数据库console命令执行( CVE-2021-42392 漏洞)

漏洞版本 1.1.100 < H2 Console < 2.0.204 漏洞复现 此处复现版本1.4.197 启动项目如下 在Driver Class中输入javax.naming.InitialContext 在JDBCURL中输入jndi注入恶意链接 生成链接命令&#xff1a; java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C …

CCD与CMOS

#1, 相机内部结构 https://zhuanlan.zhihu.com/p/158502818 #2&#xff0c;

大数据从0到1的完美落地之Hive分区

分区简介 为什么分区 Hive的Select查询时&#xff0c;一般会扫描整个表内容。随着系统运行的时间越来越长&#xff0c;表的数据量越来越大&#xff0c;而hive查询做全表扫描&#xff0c;会消耗很多时间&#xff0c;降低效率。而有时候&#xff0c;我们需求的数据只需要扫描表…

java面试高频面试题

文章目录 面向对象 什么是面向对象&#xff1f;封装继承多态 和equals比较hashCode与equals重载和重写的区别Final类加载器spring是什么AOP的理解谈谈你对IOC的理解零拷贝RocketMQ 架构设计RocketMq 事务消息原理RockeMq顺序消息消费原理简述RockerMQ持久化机制RocketMQ如何保…

redis学习整理

目录 一、简述 二、作用 三、五大基本数据类型 Key命令 1.String字符串 2.List列表 3.Set(集合&#xff09; 4.Hash&#xff08;哈希&#xff09; 5.zSet&#xff08;有序集合&#xff09; 四、主从复制 与 哨兵模式 1. 主从复制&#xff1a; 2. 哨兵模式&#xff…

【正点原子STM32连载】 第四十一章 游戏手柄实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第四…

【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

目录 前言&#xff1a; 委托构造函数&#xff1a; 类内初始化&#xff1a; 空指针&#xff1a; 枚举类&#xff1a; 总结&#xff1a; 前言&#xff1a; C的学习难度大&#xff0c;内容繁多。因此我们要及时掌握C的各种特性&#xff0c;因此我们更新本篇文章&#xff0c;向…

部署vue element-ui admin报错(vue2)

部署vue element-ui admin报错(vue2) 目录 部署vue element-ui admin报错(vue2) 一、官方安装说明 二、部署报错的关键影响因素 2.1、“开发模板”版本 2.2、完整版 2.2.1、基础知识和基础依赖 2.2.2、原理-安装过程 三、完整版 3.3、win10环境 四、效果 4.1、win7…

云安全技术——kvm虚拟化技术

目录 10-1 kvm简介 10-2 在CentOS 7 图形化界面下安装KVM 使用IDEA开发读写MySQL数据库程序 实验目的 了解 CentOS7图形化界面的部署方法 了解 KVM的组成和作用 了解 KVM的技术架构 了解KVM的安装方法 了解 KVM创建虚拟机的方法 了解KVM的常用管理命令 实验要求 能部署图形化…

为什么建议孩子学Python?理由都在这!

近几年&#xff0c;越来越多的家长选择让孩子学习编程&#xff0c;以此提高孩子的逻辑思维、信息素养等综合能力。 Python作为一种计算机程序设计语言&#xff0c;在科技行业中有广泛的应用&#xff0c;逐渐成为少儿编程教育中必学课程之一。今天&#xff0c;编编就为大家详细…

【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(二)

在上文中&#xff08;点击这里回顾>>&#xff09;&#xff0c;我们为大家介绍了HTML / JSP编辑器、智能代码完成和内容辅助等功能&#xff0c;本文将继续介绍Emmet支持、Outline 视图功能等。 MyEclipse v2023.1正式版下载 如果您有HTML或JSP文件要编辑&#xff0c;这里…

chatgpt赋能python:Python聊天程序:现代化交流的必备工具

Python聊天程序&#xff1a;现代化交流的必备工具 在信息技术快速发展的现代社会&#xff0c;聊天作为一种流行的交流方式已经取代了传统的语音电话和短信。由于智能手机和电脑的广泛普及&#xff0c;越来越多的人习惯于使用聊天软件来与朋友、家人和同事保持联系。因此&#…

GBASE南大通用携手麒麟软件、索信达 共推金融信创联合解决方案

在国家信创战略推动下&#xff0c;我国正逐步实现基础硬件-基础软件-行业应用软件的国产化替代。信创浪潮中&#xff0c;各产业链以及不同垂直细分领域的创新主体&#xff0c;正以开放、创新、团结的姿态&#xff0c;形成高凝聚力的生态合作&#xff0c;共推信创产业发展&#…

【Java】JVM学习(三)

JVM的整体内存结构 本地方法栈 本地方法栈跟 Java 虚拟机栈的功能类似&#xff0c;Java 虚拟机栈用于管理 Java 函数的调用&#xff0c;而本地方法栈则用于管理本地方法的调用。但本地方法并不是用 Java 实现的&#xff0c;而是由 C 语言实现的(比如Object.hashcode方法)。 …

PCA(主成分分析)

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示&#xff0c;可用于提取数据的主要特征分量&#xff0c;常用于高维数据的降维。数据降维是无监督学习的另外一个常见问题。 数据的向量表示及降维问题 …

PostgreSQL 如何对索引进行分析和处理

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

智慧煤矿4G物联网方案,矿山矿井远程监控管理4G网关应用

随着经济发展煤矿需求不断激增&#xff0c;矿山矿井普遍处于偏远山区&#xff0c;生产管理、人员安全、生产效率是每个矿山矿井都需要考虑的问题&#xff0c;利用网关对现场终端设备连接组网&#xff0c;实现智慧煤矿远程管理。 各矿山矿井分布范围比较广泛&#xff0c;户外环境…