# 数据迁移
>[success]在这里以`ThinkPHP5.0`为例,在ThinkPHP5中提供了数据库迁移工具`migration`。
>
## 1. 什么是`migration`
>一种数据库的版本控制,让团队在修改数据库结构的同时,保持彼此的进度一致。帮你更简单的管理数据库。基于原生 thinkPHP 5.0 命令行工具,融入了 Phinx 的数据库迁移
>
>[danger]特别团队协作开发时,这一功能非常方便。
>
## 2. `migration`的安装
>使用`Composer` 进行安装
>
~~~
composer require topthink/think-migration
~~~
>[danger]在安装时一定要注意版本,如果您选择的是ThinkPHP5.0那要么安装的`migration`版本也应为1.*。如果您使的是ThinkPHP5.1,可以直接使用上述命令安装最新版本即可。
>
1.* 版本的安装
~~~
composer require topthink/think-migration 1.*
~~~
## 3. `migration`的使用
>安装好后,即可以通过 `ThinkPHP`的命令行进行查看其相关的命令
>
~~~
php think
~~~
~~~
Available commands:
build Build Application Dirs
clear Clear runtime file
help Displays help for a command
list Lists commands
make
make:controller Create a new resource controller class
make:model Create a new model class
migrate
migrate:breakpoint Manage breakpoints
migrate:create Create a new migration
migrate:rollback Rollback the last or to a specific migration
migrate:run Migrate the database
migrate:status Show migration status
optimize
optimize:autoload Optimizes PSR0 and PSR4 packages to be loaded with classmaps too, good for production.
optimize:config Build config and common file cache.
optimize:route Build route cache.
optimize:schema Build database schema cache.
seed
seed:create Create a new database seeder
seed:run Run database seeders
~~~
>[dagner]这时命令中就多数了数据迁移相关的命令
>
>[danger]### 使用前,要先配置数据库(为空数据库即可)
### 1. 创建迁移类
>创建迁移类,首字母必须为大写
>
~~~
php think migrate:create Users
~~~
>[danger]`Users` 为表名称(不含前辍)
>
>第一次执行的时候会确认是否创建迁移目录;
>确认之后;
>这时会在项目根目录下执行的该命令;
>那么在项目跟目录下会看到database/migrations/20170711153001_Users.php;
>默认有一个change方法
迁移类实例
~~~
<?php
use Phinx\Migration\AbstractMigration;
class Users extends AbstractMigration
{
/**
* Change Method.
*/
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();
}
/**
* Migrate Up.
*/
public function up()
{
}
/**
* Migrate Down.
*/
public function down()
{
}
}
~~~
>[danger]注意:在设置数据表字段时会自动添加名为`id`的自增主键,如果想自定义自增主键的话,需要如下操作。
>
~~~php
<?php
public function change()
{
$table = $this->table('user',array('engine'=>'MyISAM'));
$table->setId('user_id')->setPrimaryKey('user_id')
->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
->create();
}
?>
~~~
>[danger]注意:若不需要自增主键的话,请如下操作
~~~
<?php
public function change()
{
$table = $this->table('user',array('engine'=>'MyISAM'));
$table->setId(false)->setPrimaryKey('user_id')
->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
->create();
}
?>
~~~
>[danger] #### 除了使用`change`方法操作之外,还可以使用`up`和`down`方法来创建。
~~~
public function up ()
{
$table = $this->table('user',array('engine'=>'MyISAM'));
$table->setId('user_id') //关闭自动设置主键
->setPrimaryKey('user_id') //设置主键
->addColumn('username', 'string',array('limit' => 15,'default'=>'','comment'=>'用户名'))
->create();
}
public function down ()
{
$this->dropTable('user');
~~~
### 2. 常用命令
#### 1.执行数据迁移( 创建数据表)
~~~
php think migrate:run
~~~
#### 2. 执行回滚(删除重新操作)
>[danger]调整表结构时需要执行,执行时会清空表中现在的数据
~~~
php think migrate:rollback
#回滚所有
php think migrate:rollback -t 0
~~~
- 前言
- PHP获取服务器信息
- PHP中的常用函数-新手必备知识
- 日期时间相关的函数
- 时区设置
- time函数
- strtotime 时间戳
- date函数
- mktime函数
- 联合使用 date() 和 mktime()
- PHP数据类型相关的函数
- PHP数组相关的函数
- array函数
- 数组的排序
- sort()和rsort()函数
- asort()和arsort()函数
- ksort()和krsort()函数
- array_multisort()函数
- array_reverse函数
- 数组的遍历
- 数组中新增和删除元素
- 数组头部插入和删除元素
- 数组尾部插入和删除元素
- 删除数组中重复的元素
- 删除数组中指定的元素
- 数组的合并
- 随机/打乱已知数组
- range函数
- 数组去除重复
- PHP常用功能函数
- URL地址处理函数
- post/get请求
- PHP字符串相关的函数
- PHP文件系统
- PHP正则表达式
- 正则表达式语法规则
- POSIX扩展的正则表达式函数
- 查找字串函数
- 替换字符串函数
- Perl兼容的正则表达式函数
- PHP中类的应用
- 中文编码
- 关于stdClass
- 变量相关函数
- unset
- PHP数值相关的函数
- 数值取整
- 开发工具与开发环境使用技巧
- sublime
- 常用插件
- Atom
- 常用插件
- 常见问题
- Visual Studio Code
- vscode常用插件
- 编程推荐字体
- MAC下开发常识
- MAC下的常用设置
- MAC下的常用开发工具
- MAC下XAMMP的常见问题
- Apache配置基础
- PhpStrom
- php中的常见问题
- 文件上传相关问题
- API接口中常见问题
- 关于缓冲区问题
- PHP中注意事项
- 条件判断
- PHP文件管理模块
- 文件管理源码
- 文件管理的常用函数
- 文件管理中文乱码处理
- 自定义功能函数
- 文件下载
- PHP常用头信息定义汇总
- 常见PHP网页木马
- 加密算法
- 1. Base58可逆加密
- 2. AES加密/解密
- mysql数据库操作
- 命令行操作Mysql常用令行-查询
- 命令行操作Mysql常用令行-操作
- Mysql使用中的技巧
- 在线数据库管理中常用命令
- sql show命令
- mysql数据库的备份与恢复
- 二进制日志介绍
- 二进制日志常用命令
- ThinkPHP
- 数据迁移
- 常见问题
- 验证码问题
- API接口中的异常处理
- API接口安全
- 解决跨域问题
- 自定义实用功能函数