其實如果想刪除所有表可以直接如下操作:
在navicat中直接選中所有表,然后右鍵刪除表即可,會有提示,一路確定,就會先刪掉沒有外鍵的表和字表,只要一路確定,刪幾批就把表都刪完了,並不算太麻煩。
轉:
MySQL刪除所有表的外鍵約束、禁用外鍵約束
版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/junlovejava/article/details/78360253
數據庫的外鍵雖然能保證數據數據一致性和完整性,但是也一定程度地影響了數據更新的性能。在開發中,我們使用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';
- 1
- 2
- 3
修改MySQL變量FOREIGN_KEY_CHECKS
-- 禁用外鍵約束 SET FOREIGN_KEY_CHECKS = 0 -- 啟用外鍵約束 SET FOREIGN_KEY_CHECKS = 1;
- 1
- 2
- 3
- 4
由於FOREIGN_KEY_CHECKS是基於session的,當關閉了session重新建立連接,這個變量就會恢復默認值,也就是開啟外鍵約束,當然我們也可以全局的FOREIGN_KEY_CHECKS變量。
SET GLOBAL FOREIGN_KEY_CHECKS = 0;
- 1
或者:
SET @@GLOBAL.FOREIGN_KEY_CHECKS = 0;
- 1
修改完成后,我們可以查看修改后的結果
SELECT @@FOREIGN_KEY_CHECKS;
