繁体   English   中英

MySQL n:m 关系上的外键问题

[英]MySQL Problem with foreign key on n:m relation

我有这个数据库

create table ticket
(
  id int auto_increment primary key,
  name varchar(100)
);

create table document
(
  id int auto_increment primary key,
  name varchar(100)
);

create table ticket_document
(
  ticket_id int,
  document_id int
);

insert into ticket (id, name) VALUES (1, "a"),(2,"b");
insert into document (id, name) VALUES (1, "x"),(2,"y");
insert into ticket_document (ticket_id, document_id) VALUES (1,1),(1,2),(2,2);

因此,每张工单都可以有多个文档,并且每个文档都可以引用到多个工单。

我想实现,如果我删除一张票,所有对他的文件的引用都将被删除,并且如果不再引用另一张票中的一个文件,该文件也将被删除。 但我不知道如何设置外键。

创建外键:

ALTER TABLE ticket_document
ADD FOREIGN KEY (ticket_id) REFERENCES ticket (id) ON DELETE CASCADE ON UPDATE CASCADE,
ADD FOREIGN KEY (document_id) REFERENCES document (id) ON DELETE CASCADE ON UPDATE CASCADE;

票证删除后,从document中显式删除行(或使用服务事件过程):

DELETE 
FROM document 
WHERE NOT EXISTS ( SELECT NULL 
                   FROM ticket_document
                   WHERE ticket_document.document_id = document.id );

小提琴


或者,您可以使用 AFTER DELETE 触发器来自动清除document表:

CREATE TRIGGER tr_ad_ticket
AFTER DELETE
ON ticket
FOR EACH ROW
DELETE 
FROM document 
WHERE NOT EXISTS ( SELECT NULL 
                   FROM ticket_document
                   WHERE ticket_document.document_id = document.id );

小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM