【发布时间】:2015-06-28 15:56:02
【问题描述】:
我在我的 SQL Server 2008 数据库中的两个表之间创建了外键关系。当我尝试从包含主键的表中删除一行时,出现错误。如何从我的另一个表中将主键用作外键的表中删除一行?
【问题讨论】:
-
请分享您的表结构、您尝试运行的 SQL 以及确切的错误。如果没有更多细节,很难为您提供帮助。
标签: sql sql-server-2008
我在我的 SQL Server 2008 数据库中的两个表之间创建了外键关系。当我尝试从包含主键的表中删除一行时,出现错误。如何从我的另一个表中将主键用作外键的表中删除一行?
【问题讨论】:
标签: sql sql-server-2008
这是具有外键约束的要点:您不能从一个表中删除具有从另一表引用它们的记录的记录。
您可以在约束本身上使用on delete cascade 选项(您需要删除并重新创建它)或先从子表中删除引用记录,然后再从父表中删除记录。
【讨论】:
两种选择:
使用级联删除选项重新创建表。更多细节在这里: http://www.techonthenet.com/sql_server/foreign_keys/foreign_delete.php
语法:
CREATE TABLE **child_table**
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
ON DELETE CASCADE
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);
手动查找使用主键的子元素并删除:
DELETE FROM table_name_with_foreign_key
WHERE some_column=some_value;
然后带着主键回到主表,删除行:
DELETE FROM table_name
WHERE some_column = some_value;
【讨论】: