6数据库迁移工具
未知
2021-07-04 11:54:58
0

数据库迁移工具

使用数据库迁移工具可以将数据库结构和数据很容易的在不同的数据库之间管理迁移。

在以前,为了实现“程序安装”,你可能会导出一份sql文件,安装时,用程序解析这个sql文件,执行里面的语句,这样做有诸多的局限性,但现在使用数据库迁移工具,你可使用一个强大的类库API来创建数据库结构和记录,并且可以容易的安装到Mysql,sqlite,sqlserver等数据库。

原项目手册:phinx

使用范例:

使用之前你应当正确的连接到数据库,不论是mysql,sqlite,sqlserver

安装

composer require topthink/think-migration
复制

创建迁移工具文件

//执行命令,创建一个操作文件,一定要用大驼峰写法,如下
php think migrate:create AnyClassNameYouWant
//执行完成后,会在项目根目录多一个database目录,这里面存放类库操作文件
//文件名类似/database/migrations/20190615151716_any_class_name_you_want.php
复制

编辑文件

<?php

use think\migration\Migrator;
use think\migration\db\Column;
 
class  AnyClassNameYouWant 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()
    {
        // create the table
        $table  =  $this->table('users',array('engine'=>'MyISAM'));
        $table->addColumn('username', 'string',array('limit'  =>  15,'default'=>'','comment'=>'用户名,登陆使用'))
        ->addColumn('password', 'string',array('limit'  =>  32,'default'=>md5('123456'),'comment'=>'用户密码')) 
        ->addColumn('login_status', 'boolean',array('limit'  =>  1,'default'=>0,'comment'=>'登陆状态'))
        ->addColumn('login_code', 'string',array('limit'  =>  32,'default'=>0,'comment'=>'排他性登陆标识'))
        ->addColumn('last_login_ip', 'integer',array('limit'  =>  11,'default'=>0,'comment'=>'最后登录IP'))
        ->addColumn('last_login_time', 'datetime',array('default'=>0,'comment'=>'最后登录时间'))
        ->addColumn('is_delete', 'boolean',array('limit'  =>  1,'default'=>0,'comment'=>'删除状态,1已删除'))
        ->addIndex(array('username'), array('unique'  =>  true))
        ->create();
    }

}
复制

执行迁移工具

php think migrate:run
//此时数据库便创建了prefix_users表.
复制

数据库会有一个migrations表,这个是工具使用的表,不要修改

例子

 $table = $this->table('followers', ['id' => false, 'primary_key' => ['user_id', 'follower_id']]);
$table->addColumn('user_id', 'integer')
      ->addColumn('follower_id', 'integer')
      ->addColumn('created', 'datetime')
      ->addIndex(['email','username'], ['limit' => ['email' => 5, 'username' => 2]])
      ->addIndex('user_guid', ['limit' => 6])

     ->create();
复制

表支持的参数选项

选项 描述
comment 给表结构设置文本注释
row_format 设置行记录模格式
engine 表引擎 (默认 InnoDB)
collation 表字符集 (默认 utf8\_general\_ci)
signed 是否无符号 signed(默认 true)

常用列

  • biginteger
  • binary
  • boolean
  • date
  • datetime
  • decimal
  • float
  • integer
  • string
  • text
  • time
  • timestamp
  • uuid

所有的类型都支持的参数

Option Description
limit 文本或者整型的长度
length limit别名
default 默认值
null 允许 NULL 值 (不该给主键设置
after 在哪个字段名后 (只对MySQL有效)
comment 给列设置文本注释

索引的用法

      ->addIndex(['email','username'], ['limit' => ['email' => 5, 'username' => 2]])
      ->addIndex('user_guid', ['limit' => 6])
      ->addIndex('email',['type'=>'fulltext'])
复制

如上面例子所示,默认是普通索引,mysql可设置生效复合索引,mysql可以设置fulltext.

自动版本升级降级

该项目可以升级和还原,就像git/svn一样rollback。

如果希望实现自动升级降级,那就把逻辑写在change方法里,只最终调用createupdate方法,不要调用save方法。

change方法内仅支持以下操作

  • createTable
  • renameTable
  • addColumn
  • renameColumn
  • addIndex
  • addForeignKey

如果真的有调用其他方法,可以写到updown方法里,这里的逻辑不支持自动还原,up写升级的逻辑,down写降级的逻辑。

    public function change()
    {
        // create the table
        $table = $this->table('user_logins');
        $table->addColumn('user_id', 'integer')
              ->addColumn('created', 'datetime')
              ->create();
    }

    /**
     * Migrate Up.
     */
    public function up()
    {

    }

    /**
     * Migrate Down.
     */
    public function down()
    {

    }
复制

上一篇:6自定义指令

下一篇:6Workerman

相关内容

浙江宁波喊停“刷医保购买华...
浙江宁波暂停使用医保卡购买华为WATCH D2智能手表,规范医保资...
2025-02-09 22:00:58
WAF在网络安全防护中的角...
摘要: 随着互联网发展,网络安全问题突出。Web应用防火墙(WA...
2025-02-09 19:23:38
网络防御武器:WAF技术在...
WAF技术是网络安全领域的重要一环,能实时检测并拦截恶意请求和有害...
2025-02-09 18:00:40
使用 PHP upload...
使用 PHP 的 `upload_max_filesize` 时,...
2025-02-09 13:23:41
触发器在数据完整性维护中的...
触发器在数据库中维护数据完整性方面具有重要作用,能确保数据一致性、...
2025-02-09 13:00:43
触发器与事件处理程序的比较
触发器与事件处理程序是用于处理特定事件的两种机制。触发器是数据库对...
2025-02-09 12:23:36

热门资讯

tp6开发规范 命名规范 请理解并尽量遵循以下命名规范,可以减少在开发过程中出现不必要的错误。 ThinkPHP6....
6高级查询 快捷查询 快捷查询方式是 一种多字段相同查询条件 的简化写法,可以进一步简化查询条件的写法,在多个字...
tp6多应用提示控制器不存在:... 第一个情况是没有使用composer安装扩展。 如果要使用多应用模式, 你需要win+r,cmd指针...
6配置 配置目录 单应用模式 对于单应用模式来说,配置文件和目录很简单,根目录下的 config 目录下面就...
6异常处理 和PHP默认的异常处理不同,ThinkPHP抛出的不是单纯的错误信息,而是一个人性化的错误页面。 异...
6swoole 本篇内容主要讲述了最新的 think-swoole 扩展的使用。目前仅支持Linux环境或者MacO...
6助手函数 助手函数 系统为一些常用的操作方法封装了助手函数,便于使用,包含如下: 助手函数 描述 abort ...
6查询表达式 查询表达式 查询表达式支持大部分的SQL查询语法,也是 ThinkPHP 查询语言的精髓,查询表达式...
6路由参数 路由参数 路由分组及规则定义支持指定路由参数,这些参数主要完成路由匹配检测以及后续行为。 路由参数可...
6查询 模型查询和数据库查询方法的区别主要在于,模型中的查询的数据在获取的时候会经过获取器的处理,以及更加对...