2010-12-15 88 views
5

我有一個我備份的數據庫。現在我試圖從原始數據庫中刪除所有內容並將其恢復爲空狀態。因爲它是一個關係數據庫,它有關鍵的限制。有沒有我可以使用的工具?清空關係數據庫模式

+0

我不知道一個工具可以做到這一點,但它可能沒有必要。訣竅是按照正確的順序從表中刪除。我曾經不得不在Oracle中這樣做。 Oracle擁有自己的表格,其中包含有關我創建的表格之間所有關係的信息。通過查詢這個metatable,我能夠得到正確的關係排序,以便刪除而不會觸及關鍵的違反條約(我作爲評論發佈,因爲我不知道這是否可能在MySQL中)。另一個(和更快的運行)選項是禁用約束,截斷,重新啓用約束。 – FrustratedWithFormsDesigner 2010-12-15 15:40:25

回答

7

最簡單的方法可能是禁用外鍵檢查,然後截斷表格。由於外鍵已禁用,因此截斷表的順序無關緊要。

set foreign_key_checks = 0; 
truncate table parent; 
truncate table child; 
truncate table ... 

您甚至可以使用information_schema爲您生成truncate table語句。這樣的事情:

select concat('truncate table ',table_schema,'.',table_name,';') as sql_stmt 
from information_schema.tables 
where table_schema = 'your_schema_name' 
and table_type = 'base table'; 
+0

感謝您的幫助。解決了這個問題。 – 2010-12-17 01:59:23

2

您可以臨時刪除或禁用所有約束,截斷所有表,然後恢復約束。我已經採取了這種方法的SQL Server,它工作正常。

http://lists.mysql.com/mysql/194954

也許一個更好的辦法是逆向擠出架構成腳本(你把版本控制之下),然後從頭開始重新創建數據庫。

+0

Thanks.I將嘗試這些解決方案。 – 2010-12-15 16:11:46

+0

謝謝,解決了這個問題。 – 2010-12-17 01:59:38