Sql 从表中删除记录(2x多对多关系)
我有一个包含5个表的数据库Sql 从表中删除记录(2x多对多关系),sql,tsql,Sql,Tsql,我有一个包含5个表的数据库 [Person] -PersonId PK -First name -Middle name -Surname -Type [Resident] -PersonId PK FK -AddressId PK FK [Addresse] -AddressId PK -Road -Number -Postal code -City -Type [TelephoneOwner] -TelephoneId PK FK -PersonId PK FK [Telepho
[Person]
-PersonId PK
-First name
-Middle name
-Surname
-Type
[Resident]
-PersonId PK FK
-AddressId PK FK
[Addresse]
-AddressId PK
-Road
-Number
-Postal code
-City
-Type
[TelephoneOwner]
-TelephoneId PK FK
-PersonId PK FK
[Telephone]
-TelephoneId PK
-TelephoneNumber
-Type
我的所有FK约束都在使用
ON DELETE CASCADE
ON UPDATE CASCADE
这种关系是一个人可以有多个地址,而一个地址可以有多个人。
一个人可以有多部电话,一部电话可以有多个人
我想删除与使用名字的人有关的所有内容。当然,其他人使用的地址/电话应该保留在数据库中。使用外键,在更新/删除父表时,级联会影响子表 您可以从Person:中删除,Person:是Resident和TelephoneOwner的父表。您删除的人的任何记录都将从这两个表中删除。它不会从居民和电话所有者级联到电话或地址。如果您想保持这些表的干净,您可以安排一个定期清理这些表的作业,或者在Person上添加一个触发器,以检查它是否将电话号码或地址留给了没有所有者的人。在这种情况下,请删除电话号码或地址 对于每个请求,下面包含一个示例触发器。请注意,如果您的系统不断删除和更新,触发器可能会导致性能问题
CREATE TRIGGER [dbo].[some_trigger_name]
ON [dbo].[Person]
FOR DELETE
AS
BEGIN
SET NOCOUNT ON
DELETE
FROM Addresse
WHERE AddressId IN(-- Select the Addresses associated with people who were just deleted.
SELECT R1.AddressId FROM DELETED JOIN Resident R1 on DELETED.PersonId = R1.PersonId
EXCEPT
-- Substract Addresses that have a Person associated with them other then a Person who was just deleted.
SELECT R2.AddressId FROM Resident R2
WHERE R2.PersonId NOT IN(SELECT PersonId from DELETED))
END
GO
您可以修改此项以进行更新,也可以删除电话。
删除与使用其名字的人连接的所有内容
可能有多个同名的人。感谢您的回答,我不熟悉触发器,并且在花时间在网上查找添加触发器的方法后。你可以写一个建议吗?@MortenGodrimJensen看一看,因为你把这个问题标记为tsql,我想你正在运行SQL Server。我会用一个触发器更新我的答案,你可以用它作为起点。