SQL 删除有约束的行
SQL Delete Rows with Constraints
我正在做一些练习,为此我想删除一个用 Primary/Foreign 键引用的行。
是否可以删除那些行而不删除与其有关系的行? (如删除级联)
我也知道我可以禁用约束,但是我想尝试在不禁用约束的情况下删除。
一行总是可以被删除,除非它的主键被引用为另一行中的外键table。在这种情况下,当遇到针对数据的 primary/foreign 键关系时,尝试删除行将导致错误。 ON DELETE CASCADE
选项可用于解决此问题,并在从父项 table.
中删除行时从子项 table 中删除记录
如果您只想删除没有关系的行,那么您可以排除确实有关系的行使用 NOT EXISTS
:
删除操作的关系
DELETE FROM table1 a
WHERE NOT EXISTS (
SELECT FROM table2 b
WHERE b.table1Id = a.id
)
我正在做一些练习,为此我想删除一个用 Primary/Foreign 键引用的行。
是否可以删除那些行而不删除与其有关系的行? (如删除级联)
我也知道我可以禁用约束,但是我想尝试在不禁用约束的情况下删除。
一行总是可以被删除,除非它的主键被引用为另一行中的外键table。在这种情况下,当遇到针对数据的 primary/foreign 键关系时,尝试删除行将导致错误。 ON DELETE CASCADE
选项可用于解决此问题,并在从父项 table.
如果您只想删除没有关系的行,那么您可以排除确实有关系的行使用 NOT EXISTS
:
DELETE FROM table1 a
WHERE NOT EXISTS (
SELECT FROM table2 b
WHERE b.table1Id = a.id
)