MySQL删除表時忽略外鍵限制如何實作方法例子分享給大家,本文是告訴大家關于MySQL删除表的時候忽略外鍵限制的簡單實作,有興趣的朋友趕緊來了解一下吧。
删除表并不常見,特别是對于具有外鍵關聯的表。但是,在開發過程中,通常會發現Schema設計存在問題并删除現有資料庫中的所有表以進行重新建立;此外,在測試時,還有所有需要重新建立資料庫的表。當然,許多自動化工具都可以做這些事情。
删除表時有的時候會遇到這樣的錯誤消息:
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
這是因為您試圖删除的表中的字段被用作其他表的外鍵,是以必須首先删除表(子表),然後删除表(父表)。也就是說,删除表的過程需要與建立表的過程相一緻。
然而,這通常是不可接受的。一方面,如果有太多的表,手工排序有點不可接受;此外,沒有自動工具對排序(事實上,這不是不可能的)。是以,MySQL提供了一個變量Fu外KKey檢查以确定是否需要檢查外鍵限制。
通常比較推薦這樣做:
首先,自動生成所有的DROP語句,将其中的MyDatabaseName替換成你的資料庫名稱:
SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';
接着,在生成的代碼前後添加下面設定FOREIGN_KEY_CHECKS變量的語句:
SET FOREIGN_KEY_CHECKS = 0
-- DROP語句
SET FOREIGN_KEY_CHECKS = 1;
但是,如果忘記了最後一句也沒有什麼關系,這個變量是基于Session的,也就是說,當你關閉了用戶端,重建立立連接配接時,這個變量會恢複預設值。假如需要在全局範圍内不檢查外鍵限制(這種情況會很少吧),可以這麼做:
SET GLOBAL FOREIGN_KEY_CHECKS = 0;
或者
set @@global.FOREIGN_KEY_CHECKS = 0;