【发布时间】:2021-05-25 12:48:08
【问题描述】:
以下是关系模式,
college(ID int, name text, grade int);
friend(ID1 int, ID2 int);
likes(ID1 int, ID2 int);
我写了一个触发器来保持友谊关系的对称性。这意味着如果(X,Y)从朋友中删除,(Y,X)也应该被删除。
以下是表格的创建;
create table college
(
id int auto_increment primary key,
name text not null,
grade int not null
);
create table likes
(
id1 int not null,
id2 int
);
create table friend
(
id1 int not null,
id2 int not null,
constraint friend_pk
primary key (id1, id2),
constraint friend_college_id_fk
foreign key (id1) references college (id)
constraint friend_college_id_fk2
foreign key (id2) references college (id)
);
我写了以下触发器;
delimiter //
drop trigger if exists Friend_Delete //
create trigger Friend_Delete
after delete
on friend
for each row
begin
delete
from friend
where id1 = OLD.id2
and id2 = OLD.id1;
end //
delimiter ;
但是当我执行以下查询时,
delete from friend where id1 = 1 and id2 = 2;
它给了我这个结果; 无法更新存储函数/触发器中的表“朋友”,因为它已被调用此存储函数/触发器的语句使用
我用谷歌搜索了这个问题,它被称为发生了无休止的递归调用。但是当我们说delete之后就被删除了,为什么这里不能再删除呢?
【问题讨论】:
-
你想要这样做的事实表明你有一个设计缺陷
标签: mysql sql database triggers mariadb