2016-03-29 52 views
0

例如廢掉列的值,我有這些表和數據:刪除的行

TABLE: logo_user 
+----+---------+ 
| id | logo_id | 
+----+---------+ 
| 1 | 1  | 
| 2 | 2  | 
+----+---------+ 

TABLE: logo 
+----+ 
| id | 
+----+ 
| 1 | 
| 2 | 
+----+ 

我要的是在logo表中刪除所有的行,並取消其指的是它的值。例如:

TABLE: logo_user 
+----+---------+ 
| id | logo_id | 
+----+---------+ 
| 1 | NULL | 
| 2 | NULL | 
+----+---------+ 

TABLE: logo (now emptied) 
  • 我嘗試使用TRUNCATE ... CASCADE但在logo_user表也被刪除每行。
  • 我也考慮改變logo_user級聯在刪除上的外鍵約束,但這樣做太多了。實際上,我有很多表格指的是logo表格。
+2

在'on delete set null'上使用FK是唯一的「自動」執行此操作的方法。這將是一個很少的工作,然後改變每個刪除語句處理所有相關的表。 –

回答

0

您可以針對您的問題使用以下解決方案。

​​

對您的主表中的外鍵將在一個步驟中解決問題。它基本上做的是: 如果父表中的記錄被刪除,那麼子表中的相應記錄將將外鍵字段設置爲空(您將在鍵中提及的列)。子表中的記錄不會被刪除,相應的值將根據您的要求更新爲空。例如,您可以參考下面的語法:

CREATE TABLE table_name 
(
column1 datatype null/not null, 
column2 datatype null/not null, 
    ... 

CONSTRAINT fk_col 
FOREIGN KEY (column1, column2, ... column_n) 
REFERENCES parent_table (column1, column2, ... column_n) 
ON DELETE SET NULL 
); 
+0

儘管此代碼可以回答這個問題,提供 關於_why_額外的內容及/或_how_此代碼 回答了這個問題會顯著提高其 長期價值。請[編輯]你的答案,添加一些 的解釋。 –

+0

補充說明:) @TobySpeight –

+0

感謝您的支持!我已經改變了你的解決方案。而不是創建一個表,我通過降低它的外鍵約束,並與'ON DELETE SET NULL'重新加入更新了'logo_user'表。 – KaNa0011

0

我不知道爲什麼它的「太辛苦了」修改外鍵ON DELETE SET NULL做 - 它不只是最簡單的方法,你將不得不做因爲默認NO ACTION將防止您在沒有級聯的情況下刪除。