## æ°æ®åºè¿ç§»å·¥å
·
使ç¨æ°æ®åºè¿ç§»å·¥å
·å¯ä»¥å°æ°æ®åºç»æåæ°æ®å¾å®¹æçå¨ä¸åçæ°æ®åºä¹é´ç®¡çè¿ç§»ã
å¨ä»¥åï¼ä¸ºäºå®ç°âç¨åºå®è£
âï¼ä½ å¯è½ä¼å¯¼åºä¸ä»½sqlæ件ï¼å®è£
æ¶ï¼ç¨ç¨åºè§£æè¿ä¸ªsqlæ件ï¼æ§è¡éé¢çè¯å¥ï¼è¿æ ·åæ诸å¤çå±éæ§ï¼ä½ç°å¨ä½¿ç¨æ°æ®åºè¿ç§»å·¥å
·ï¼ä½ å¯ä½¿ç¨ä¸ä¸ªå¼ºå¤§çç±»åºAPIæ¥å建æ°æ®åºç»æåè®°å½ï¼å¹¶ä¸å¯ä»¥å®¹æçå®è£
å°Mysqlï¼sqliteï¼sqlserverçæ°æ®åºã
å项ç®æåï¼[phinx](https://book.cakephp.org/phinx/0/en/index.html)
使ç¨èä¾ï¼
> 使ç¨ä¹åä½ åºå½æ£ç¡®çè¿æ¥å°æ°æ®åº,ä¸è®ºæ¯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æ¹æ³éï¼åªæç»è°ç¨`create`å`update`æ¹æ³ï¼ä¸è¦è°ç¨`save`æ¹æ³ã
`change`æ¹æ³å
ä»
æ¯æ以ä¸æä½
* createTable
* renameTable
* addColumn
* renameColumn
* addIndex
* addForeignKey
å¦æççæè°ç¨å
¶ä»æ¹æ³ï¼å¯ä»¥åå°`up`å`down`æ¹æ³éï¼è¿éçé»è¾ä¸æ¯æèªå¨è¿åï¼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()
{
}
~~~
- åºè¨
- åºç¡
- å®è£
- å¼åè§è
- ç®å½ç»æ
- é ç½®
- æ¶æ
- 请æ±æµç¨
- æ¶ææ»è§
- å ¥å£æ件
- å¤åºç¨æ¨¡å¼
- URL访é®
- 容å¨åä¾èµæ³¨å ¥
- æå¡
- é¨é¢
- ä¸é´ä»¶
- äºä»¶
- è·¯ç±
- è·¯ç±å®ä¹
- åéè§å
- è·¯ç±å°å
- è·¯ç±åæ°
- è·¯ç±ä¸é´ä»¶
- è·¯ç±åç»
- èµæºè·¯ç±
- 注解路ç±
- è·¯ç±ç»å®
- ååè·¯ç±
- MISSè·¯ç±
- è·¨å请æ±
- URLçæ
- æ§å¶å¨
- æ§å¶å¨å®ä¹
- åºç¡æ§å¶å¨
- 空æ§å¶å¨
- èµæºæ§å¶å¨
- æ§å¶å¨ä¸é´ä»¶
- 请æ±
- 请æ±å¯¹è±¡
- 请æ±ä¿¡æ¯
- è¾å ¥åé
- 请æ±ç±»å
- HTTP头信æ¯
- 伪éæ
- åæ°ç»å®
- 请æ±ç¼å
- ååº
- ååºè¾åº
- ååºåæ°
- éå®å
- æ件ä¸è½½
- æ°æ®åº
- è¿æ¥æ°æ®åº
- åå¸å¼æ°æ®åº
- æ¥è¯¢æé å¨
- æ¥è¯¢æ°æ®
- æ·»å æ°æ®
- æ´æ°æ°æ®
- å é¤æ°æ®
- æ¥è¯¢è¡¨è¾¾å¼
- é¾å¼æä½
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- èåæ¥è¯¢
- å页æ¥è¯¢
- æ¶é´æ¥è¯¢
- é«çº§æ¥è¯¢
- è§å¾æ¥è¯¢
- JSONå段
- åæ¥è¯¢
- åçæ¥è¯¢
- æ¥è¯¢äºä»¶
- è·åå¨
- äºå¡æä½
- åå¨è¿ç¨
- æ°æ®é
- æ°æ®åºé©±å¨
- 模å
- å®ä¹
- 模åå段
- æ°å¢
- æ´æ°
- å é¤
- æ¥è¯¢
- æ¥è¯¢èå´
- JSONå段
- è·åå¨
- ä¿®æ¹å¨
- æç´¢å¨
- æ°æ®é
- èªå¨æ¶é´æ³
- åªè¯»å段
- 软å é¤
- ç±»å转æ¢
- 模åè¾åº
- 模åäºä»¶
- 模åå ³è
- ä¸å¯¹ä¸å ³è
- ä¸å¯¹å¤å ³è
- è¿ç¨ä¸å¯¹å¤
- è¿ç¨ä¸å¯¹ä¸
- å¤å¯¹å¤å ³è
- å¤æå ³è
- å ³èé¢è½½å ¥
- å ³èç»è®¡
- å ³èè¾åº
- è§å¾
- 模æ¿åé
- è§å¾è¿æ»¤
- 模æ¿æ¸²æ
- 模æ¿å¼æ
- è§å¾é©±å¨
- é误åæ¥å¿
- å¼å¸¸å¤ç
- æ¥å¿å¤ç
- è°è¯
- è°è¯æ¨¡å¼
- Traceè°è¯
- SQLè°è¯
- åéè°è¯
- è¿ç¨è°è¯
- éªè¯
- éªè¯å¨
- éªè¯è§å
- é误信æ¯
- éªè¯åºæ¯
- è·¯ç±éªè¯
- å ç½®è§å
- 表å令ç
- 注解éªè¯
- æ项
- ç¼å
- Session
- Cookie
- å¤è¯è¨
- ä¸ä¼
- å½ä»¤è¡
- å¯å¨å ç½®æå¡å¨
- æ¥ççæ¬
- èªå¨çæåºç¨ç®å½
- å建类åºæ件
- æ¸ é¤ç¼åæ件
- çææ°æ®è¡¨å段ç¼å
- çæè·¯ç±æ å°ç¼å
- è¾åºè·¯ç±å®ä¹
- èªå®ä¹æ令
- æ©å±åº
- æ°æ®åºè¿ç§»å·¥å ·
- Workerman
- thinkå©æå·¥å ·åº
- éªè¯ç
- Swoole
- éå½
- å©æå½æ°
- å级æ导
- æ´æ°æ¥å¿