詳解MySQL數據庫刪除所有表的外鍵約束、禁用外鍵約束相關腳本
作者:波波說運維
在實際開發中,數據庫中一般不會存在外鍵,阿里的開發手冊中也強制不使用外鍵與級聯操作,一切外鍵概念必須在應用層解決。如果數據庫中已存在外鍵了,這時候需要禁用或者刪除應該怎么辦呢?
概述
數據庫的外鍵雖然能保證數據數據一致性和完整性,但是也一定程度地影響了數據更新的性能。在開發中,我們使用PowerDesigner建立物理數據模型時,為了結構的清晰,增加可讀性,會創建表與表之間的關聯關系。
在實際開發中,數據庫中一般不會存在外鍵,阿里的開發手冊中也強制不使用外鍵與級聯操作,一切外鍵概念必須在應用層解決。如果數據庫中已存在外鍵了,這時候需要禁用或者刪除應該怎么辦呢?
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;
修改完成后可以查看修改后的結果
- SELECT @@FOREIGN_KEY_CHECKS;
2. 批量刪除所有表的外鍵
查詢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';
責任編輯:趙寧寧
來源:
今日頭條