摘要:事務(wù)性的遷移整體遷移或回滾執(zhí)行復(fù)雜的遷移時(shí),通常想確定每個(gè)完整遷移全體是成功了還是失敗了,以便數(shù)據(jù)庫(kù)保持一致和完整。在創(chuàng)建數(shù)據(jù)表的過程中可以同時(shí)聲稱多張表,刪除多張表。相關(guān)資料數(shù)據(jù)庫(kù)遷移之?dāng)?shù)據(jù)庫(kù)遷移
前言
Yii2 migrate 數(shù)據(jù)庫(kù)遷移要我用一個(gè)詞形容的話,“雞助”最適合不過了,食之無味,棄之可惜。Yii2 migrate能完成的操作,手工會(huì)更快,數(shù)據(jù)表結(jié)構(gòu)變化也不能保存源表的數(shù)據(jù),但是對(duì)于一些修改和建表操作在團(tuán)隊(duì)協(xié)作中還是挺方便的,數(shù)據(jù)庫(kù)管理者只需要執(zhí)行yii migrate的命令就能操作表,追蹤數(shù)據(jù)庫(kù)遷移的歷史,應(yīng)用新的遷移版本,或恢復(fù)之前的遷移版本。但凡有優(yōu)劣,可當(dāng)優(yōu)勢(shì)大于劣勢(shì)的時(shí)候,我們會(huì)更多的去考慮如何落地的問題。
建立遷移1、建立新的遷移請(qǐng)運(yùn)行以下命令:
./yii migrate/create plan_admin //plan_admin 遷移建立名為plan_admin的新表
2、運(yùn)行結(jié)果,生成文件及文件名看下圖:
3、打開m170108_055206_plan_admin.php即可看到
注釋:當(dāng)執(zhí)行./yii migrate/create plan_admin命令遇到如下問題:"The configuration for the "user" component must contain a "class" element." 或者"The configuration for the "session" component must contain a "class" element."。
解決辦法:
創(chuàng)建數(shù)據(jù)表
首先說一下問題的根源,是你的配置文件(main.php)配置user或者session的時(shí)候缺少了class類了,加上即可。 user類:"class" => yiiwebUser,session類:"class" => "yiiwebSession",注意這里的類必須是yiiweb下的,不能自定義,否則錯(cuò)誤問題沒法解決。參考網(wǎng)址public function up() { $tableOptions = null; if ($this->db->driverName === "mysql") { $tableOptions = "CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB COMMENT="計(jì)劃管理表""; } //一開始沒有PlanAdmin models類可將PlanAdmin::tableName()用"{{plan_admin}}"替換。 $this->createTable(PlanAdmin::tableName(), [ "id" => $this->primaryKey(), "titile" => $this->string(100)->notNull()->comment("計(jì)劃標(biāo)題"), "module" => $this->integer()->defaultValue(0)->comment("模塊"), "status" => $this->integer()->defaultValue(0)->comment("狀態(tài)"), "plan_content" => $this->text()->comment("計(jì)劃內(nèi)容"), "supervisor" => $this->string(100)->comment("督導(dǎo)人"), "end_time" => $this->integer()->comment("完成時(shí)間"), "daily_maxim" => $this->text()->comment("每日格言"), "daily_summary" => $this->text()->comment("每日總結(jié)"), "company_id" => $this->integer()->comment("公司id"), "created_time" => $this->integer()->comment("添加時(shí)間"), "update_time" => $this->integer()->comment("修改時(shí)間"), ], $tableOptions); }添加字段public function up() { //添加字段 $this->addColumn(PlanAdmin::tableName(), "user_id", "INT(11) DEFAULT 0 COMMENT "計(jì)劃人" AFTER `titile`"); // $this->addColumn(PlanAdmin::tableName(), "company_id", "INT(10) NOT NULL COMMENT "公司id" AFTER `daily_summary`"); }修改字段public function up() { $this->alterColumn(PlanAdmin::tableName(), "end_time", "string(150) COMMENT "完成時(shí)間""); }增加索引public function up() { $this->createIndex("module", PlanAdmin::tableName(), ["module"],true); }刪除某字段public function down() { $this->dropColumn(PlanAdmin::tableName(), "update_time"); }刪除某表public function down() { $this->dropTable(PlanAdmin::tableName()); }添加主鍵public function up() { $this->addForeignKey("contract_id" , "{{service_plan}}" , "contract_id" , "{{contract}}" , "id" , "CASCADE" , "RESTRICT"); } addForeignKey()方法的參數(shù)注釋: 參數(shù)1:設(shè)置本表的外鍵名(可自定義)。 參數(shù)2:本表表名。 參數(shù)3:本表中與外表關(guān)聯(lián)的字段名稱。如果有多個(gè)字段,以逗號(hào)分隔或使用一個(gè)數(shù)組。 參數(shù)4:外表表名。 參數(shù)5:外表中與本表關(guān)聯(lián)的字段名稱。如果有多個(gè)字段,以逗號(hào)分隔或使用一個(gè)數(shù)組。 參數(shù)6:刪除選項(xiàng),可選,默認(rèn)為空。可選的類型有 RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL。 參數(shù)7:更新選項(xiàng),可選,默認(rèn)為空。可選的類型有 RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL。 注意:參數(shù)3和參數(shù)5的字段類型必須一致,否則執(zhí)行失敗。事務(wù)性的遷移(整體遷移或回滾)執(zhí)行復(fù)雜的 DB 遷移時(shí),通常想確定每個(gè)完整遷移全體是成功了還是失敗了,以便數(shù)據(jù)庫(kù)保持一致和完整。為實(shí)現(xiàn)該目標(biāo),可以利用數(shù)據(jù)庫(kù)事務(wù)來處理,使用專用的 safeUp 和 safeDown 方法來達(dá)到這些目的。參考文檔
常用命令./yii migrate 默認(rèn)執(zhí)行 ./yii migrate/up
./yii migrate/down 執(zhí)行某些撤銷對(duì)表的操作
./yii migrate/redo (指定了重做多少遷移,默認(rèn)為 1) 重做遷移 就是首先回退然后應(yīng)用指定的遷移
./yii migratre/to (遷移文件名)執(zhí)行某個(gè)指定的遷移文件
./yii migrate/history (遷移數(shù)量,不指定將顯示所有) 顯示被應(yīng)用的所有遷移
./yii migrate/new (遷移數(shù)量,不指定將顯示所有) 顯示沒有被應(yīng)用的所有新遷移。在創(chuàng)建數(shù)據(jù)表的過程中可以同時(shí)聲稱多張表,刪除多張表。
執(zhí)行過的遷移文件,會(huì)在數(shù)據(jù)庫(kù)的migration中生成一條記錄,記錄此遷移文件已經(jīng)執(zhí)行過,下次將執(zhí)行數(shù)據(jù)表中不存在的遷移文件。意思就是說文件執(zhí)行過了,想要再次執(zhí)行的話,得把文件名改一下。
如下是所有這些數(shù)據(jù)庫(kù)訪問方法的列表:
yiidbMigration::execute(): 執(zhí)行一條 SQL 語(yǔ)句 yiidbMigration::insert(): 插入單行數(shù)據(jù) yiidbMigration::batchInsert(): 插入多行數(shù)據(jù) yiidbMigration::update(): 更新數(shù)據(jù) yiidbMigration::delete(): 刪除數(shù)據(jù) yiidbMigration::createTable(): 創(chuàng)建表 yiidbMigration::renameTable(): 重命名表名 yiidbMigration::dropTable(): 刪除一張表 yiidbMigration::truncateTable(): 清空表中的所有數(shù)據(jù) yiidbMigration::addColumn(): 加一個(gè)字段 yiidbMigration::renameColumn(): 重命名字段名稱 yiidbMigration::dropColumn(): 刪除一個(gè)字段 yiidbMigration::alterColumn(): 修改字段 yiidbMigration::addPrimaryKey(): 添加一個(gè)主鍵 yiidbMigration::dropPrimaryKey(): 刪除一個(gè)主鍵 yiidbMigration::addForeignKey(): 添加一個(gè)外鍵 yiidbMigration::dropForeignKey(): 刪除一個(gè)外鍵 yiidbMigration::createIndex(): 創(chuàng)建一個(gè)索引 yiidbMigration::dropIndex(): 刪除一個(gè)索引注意事項(xiàng)以上是XFtp上操作記錄,如果是本地的話運(yùn)行時(shí)把yii前面的“./”去掉。注意要在項(xiàng)目的根目錄運(yùn)行命令。
相關(guān)資料Yii2 migrate 數(shù)據(jù)庫(kù)遷移
Yii2之?dāng)?shù)據(jù)庫(kù)遷移(Migrate)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/22281.html
摘要:為了演示特性的基本使用,我將會(huì)帶領(lǐng)大家構(gòu)建一個(gè)簡(jiǎn)單的博客管理系統(tǒng)。目前為止,我們借助生成了一系列操作。有好提示實(shí)際開發(fā)中,后臺(tái)管理理應(yīng)利用協(xié)助開發(fā),可快速提高開發(fā)效果。 作者:白狼 出處:http://www.manks.top/document/easy_blog_manage_system.html 本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出...
摘要:最近在做認(rèn)證功能,記錄整個(gè)過程,方便以后查看。請(qǐng)求參數(shù)當(dāng)作請(qǐng)求參數(shù)發(fā)送,例如,由于大多數(shù)服務(wù)器都會(huì)保存請(qǐng)求參數(shù)到日志,這種方式應(yīng)主要用于請(qǐng)求,因?yàn)樗荒苁褂妙^來發(fā)送使用者從認(rèn)證服務(wù)器上獲取基于協(xié)議的,然后通過發(fā)送到服務(wù)器。 最近在做RESTful API認(rèn)證功能,記錄整個(gè)過程,方便以后查看。本文參照了 https://segmentfault.com/a/119000001636860...
閱讀 3371·2023-04-25 14:07
閱讀 3438·2021-09-28 09:35
閱讀 2079·2019-08-30 15:55
閱讀 1396·2019-08-30 13:48
閱讀 2496·2019-08-30 13:16
閱讀 3196·2019-08-30 12:54
閱讀 3232·2019-08-30 11:19
閱讀 1869·2019-08-29 17:17