2014-09-24 95 views
2

我有一個有很多數據的表。該表中的PK在7個其他表中被引用(其中每個表也包含大量數據)。現在,由於在主表和其他7個表之間從來沒有任何FK,所以我必須找到一種方法來刪除主表中所有未被其他7個表中任何其他表引用的主表中的所有行。 這就是我所想的(所有的解決方案應該使用存儲過程來實現):從主表其中id不在(選擇..表1),而不是在(選擇MySql忽略外鍵錯誤

0)「刪除。 。表格2)...表格7「是不可能的,需要永久完成。

1)創建一個存儲過程,它將在所有7個表中使用不同的逗號分隔的一組使用的id,並從主表中刪除那些不存在於任何組中的id。

2)在這7個表中的每一個表中進行「限制」FK並執行「從main_table中刪除」。

解決方案No2對我來說聽起來最好,但我有一個問題 - 我不知道如何告訴MySQL「從主表中刪除,但跳過排FK異常的行」:\ 「刪除忽略」無法使用因爲它一旦碰到拋出FK錯誤的行就會停止移除。

所以,我必須問你:有沒有辦法讓我在這7個表中的每一個表上創建「限制」FK,並運行「從main_table刪除」一些選項,它將簡單地跳過任何引發「 FK約束「錯誤?

回答

2

你可以使用一些現有的資源在這裏:

How to temporarily disable a foreign key constraint in MySQL?

http://gauravsohoni.wordpress.com/2009/03/09/mysql-disable-foreign-key-checks-or-constraints/

簡單地說,你可以禁用的外鍵約束或者刪除它:

ALTER TABLE table1 DROP FOREIGN KEY fk_name1; //get rid of current constraints ALTER TABLE table2 DROP FOREIGN KEY fk_name2;

OR

SET FOREIGN_KEY_CHECKS=0; //before your delete

SET FOREIGN_KEY_CHECKS=1; //after your delete

+0

我檢查這些鏈接。現在我有點困惑:)我想我需要FK,爲什麼我應該禁用它的檢查?我的想法是使用FK檢查來知道哪一行正在被引用,哪些不是。問題是我需要在「main_table」中保留一些(未知的)數據量。我沒有外鍵問題,因爲目前我沒有任何:) – guest86 2014-09-24 11:27:31