詳解MySQL數(shù)據(jù)庫(kù)刪除所有表的外鍵約束、禁用外鍵約束相關(guān)腳本
概述
數(shù)據(jù)庫(kù)的外鍵雖然能保證數(shù)據(jù)數(shù)據(jù)一致性和完整性,但是也一定程度地影響了數(shù)據(jù)更新的性能。在開發(fā)中,我們使用PowerDesigner建立物理數(shù)據(jù)模型時(shí),為了結(jié)構(gòu)的清晰,增加可讀性,會(huì)創(chuàng)建表與表之間的關(guān)聯(lián)關(guān)系。
在實(shí)際開發(fā)中,數(shù)據(jù)庫(kù)中一般不會(huì)存在外鍵,阿里的開發(fā)手冊(cè)中也強(qiáng)制不使用外鍵與級(jí)聯(lián)操作,一切外鍵概念必須在應(yīng)用層解決。如果數(shù)據(jù)庫(kù)中已存在外鍵了,這時(shí)候需要禁用或者刪除應(yīng)該怎么辦呢?
1. 修改MySQL變量FOREIGN_KEY_CHECKS(批量禁用啟用所有表的外鍵)
- -- 會(huì)話級(jí)別禁用外鍵約束
- SET FOREIGN_KEY_CHECKS = 0;
- -- 會(huì)話級(jí)別啟用外鍵約束
- SET FOREIGN_KEY_CHECKS = 1;
- -- 全局禁用外鍵約束
- SET GLOBAL FOREIGN_KEY_CHECKS = 0;
- 或者 SET @@GLOBAL.FOREIGN_KEY_CHECKS = 0;
- -- 全局啟用外鍵約束
- SET GLOBAL FOREIGN_KEY_CHECKS = 1;
修改完成后可以查看修改后的結(jié)果
- SELECT @@FOREIGN_KEY_CHECKS;
2. 批量刪除所有表的外鍵
查詢schema中所有外鍵名稱然后拼接生成刪除語(yǔ)句,再執(zhí)行。
- SELECT
- CONCAT( 'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ' ;' )
- FROM
- information_schema.TABLE_CONSTRAINTS c
- WHERE
- c.TABLE_SCHEMA = '數(shù)據(jù)庫(kù)名'
- AND c.CONSTRAINT_TYPE = 'FOREIGN KEY';