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