mysql的触发器相当于一个联动装置,当两个表有关联的时候,删除一个表的任意一个记录其他表的记录需要修改的时候我们可以使用mysql的触发器。 举个🌰 现在有三张表 books表 user表
借书表 现在的逻辑是这样的,如果借书表里多一条记录,那books表的某一本书的可借书本数量必然会减一。如果user或者books表里删除一条记录,那借书表中关于这个本书或者这个用户的所有记录都应该抹除,否则外键就不成立了。 这三个语句我放在这了,还有一些需要强调的细节。 如果是update 新增数据的代号是new,如果delete 被删除书籍的代号是old。 需要被执行的句子后面也要加;end也要加;
DELIMITER $$
CREATE TRIGGER t1
AFTER INSERT ON `borrowed`
FOR EACH ROW
BEGIN
UPDATE `books`
SET borrowedSize = borrowedSize+1
WHERE bookID =new.bookID;
END;
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER t2
AFTER DELETE ON `user`
FOR EACH ROW
BEGIN
DELETE FROM `borrowed`
WHERE userID = old.ID;
END;
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER t3
AFTER DELETE ON `books`
FOR EACH ROW
BEGIN
DELETE FROM `borrowed`
WHERE bookID = old.bookID;
END;
$$
DELIMITER ;
这里还有一个操作,就是当你要赋的值需要从另一张表中查出,你可以
DELIMITER $$
CREATE TRIGGER t4 AFTER INSERT
ON `borrowed` FOR EACH ROW
BEGIN
SELECT price INTO @num FROM books WHERE bookID=new.bookID;
UPDATE `user`
SET borrowed_price = @num
WHERE ID=new.userID;
END;
$$
|