2016-03-29 24 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将防止您在没有级联的情况下删除。