我有三张表,其中一张是关系表,例如:
People 表有主键:peopleid;
表 Pet 有主键:petid;
Own表有两个外键:peopleid和petid,它们共同作为Own表的主键/p>
现在
我正在尝试从给定 peopleid 的 Table People 中删除一个人,同时,应删除此人拥有的宠物,以及表 Own中存储的关系p>
请说明一下,提前致谢!
编辑: 我的问题是如何编写 sql 来实现这一点。
最佳答案
我想你需要的是ON DELETE CASCADE
。
如果删除主键行,则可以使用它自动删除所有表引用。
在您的情况下,如果您使用 peopleid
删除一个人,它将自动从 Own
表中删除引用。
示例 SQL 语句
CREATE TABLE Own (
peopleid int(11) NOT NULL,
KEY peopleid (peopleid),
FOREIGN KEY (peopleid)
REFERENCES People (peopleid)
ON DELETE CASCADE
) ENGINE=InnoDB;
由于pet 表没有people 表的外键,所以需要定义一个触发器,当people 条目被删除时自动删除pet 条目。
CREATE TRIGGER pet_delete AFTER DELETE on own
FOR EACH ROW
BEGIN
DELETE FROM Pet
WHERE Pet.petid = old.petid;
END
定义级联规则和触发器后,如果执行:
DELETE FROM People WHERE peopleid = 3
它会自动删除 own
表中 peopleid = 3
的条目和 Pet
表中相应的 petid
.
查看此链接了解更多详情。
http://www.mysqltutorial.org/mysql-on-delete-cascade/
MySQL Trigger: Delete From Table AFTER DELETE
关于mysql - 带外键约束的sql删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25819719/