假设我有一个Albums
表和一个Tracks
表。轨道上有一个album
列,它是Album
表的外键,但是该字段可以为空。不过,当我尝试删除相册时,仍然出现完整性错误:
Key (id)=(123) is still referenced from table "Track".
这一次我想强制执行ON DELETE SET NULL
行为。有可能吗?
答案 0 :(得分:0)
这是因为您已经设置了外键约束来引发错误,而不是级联删除或设置为空。您有两种选择:
在ALTER TABLE
查询之前和之后执行DELETE
,以更改约束。确保DELETE
包装在错误处理结构中(使用与PostgreSQL等效的finally
),以确保即使代码引发错误,约束也被重置为其原始行为。
将查询更改为UPDATE
-然后-DELETE
。这可能是比更改约束最明智的方法:
UPDATE Tracks SET AlbumId = NULL WHERE AlbumId = 123
DELETE FROM Albums WHERE AlbumId = 123