1. 程式人生 > >MySQL刪除所有表的外來鍵約束、禁用外來鍵約束

MySQL刪除所有表的外來鍵約束、禁用外來鍵約束

 資料庫的外來鍵雖然能保證資料資料一致性和完整性,但是也一定程度地影響了資料更新的效能。在開發中,我們使用PowerDesigner建立物理資料模型時,為了結構的清晰,增加可讀性,會建立表與表之間的關聯關係。
 在實際開發中,資料庫中一般不會存在外來鍵,阿里的開發手冊中也強制不使用外來鍵與級聯操作,一切外來鍵概念必須在應用層解決。如果資料庫中已存在外來鍵了,怎麼辦呢?

刪除所有表的外來鍵

 查詢schema中所有外來鍵名稱然後拼接生成刪除語句,再執行。

SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY '
,CONSTRAINT_NAME,' ;') FROM information_schema.TABLE_CONSTRAINTS c WHERE c.TABLE_SCHEMA='庫名' AND c.CONSTRAINT_TYPE='FOREIGN KEY';

修改MySQL變數FOREIGN_KEY_CHECKS

-- 禁用外來鍵約束
SET FOREIGN_KEY_CHECKS = 0
-- 啟用外來鍵約束
SET FOREIGN_KEY_CHECKS = 1;

由於FOREIGN_KEY_CHECKS是基於session的,當關閉了session重新建立連線,這個變數就會恢復預設值,也就是開啟外來鍵約束,當然我們也可以全域性的FOREIGN_KEY_CHECKS

變數。

SET GLOBAL FOREIGN_KEY_CHECKS = 0;

或者:

SET @@GLOBAL.FOREIGN_KEY_CHECKS = 0;

修改完成後,我們可以檢視修改後的結果

SELECT @@FOREIGN_KEY_CHECKS;