mysql - 带外键约束的sql删除

标签 mysql sql

我有三张表,其中一张是关系表,例如:

People 表有主键:peopleid
Pet 有主键:petid;
Own表有两个外键:peopleidpetid,它们共同作为Own表的主键/p>

现在
我正在尝试从给定 peopleid 的 Table People 中删除一个人,同时,应删除此人拥有的宠物,以及表 Own

请说明一下,提前致谢!

编辑: 我的问题是如何编写 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/

相关文章:

mysql - 将文本日期转换为日期时间?

php - 如何从一个表单将相关实体插入到具有自动递增主键的多个表中

mysql - 时间线图的 MySQL 子查询性能更好

mysql - 我想在 mysql 子查询中获取别名的总和

Mysql - 根据重复的 Table_1 值更新某些 Table_2 值

android - 为什么我的数据库使应用程序强制关闭但在我清除数据后工作正常?

mysql - 水平列出 mysql 行值而不旋转