如何在工作台中正确创建触发器?

时间:2016-12-10 21:25:33

标签: mysql sql database mysql-workbench

我正在尝试在我的数据库中创建一个简单的triger功能,所以当另一个表更新时,我可以更改其中一个表中的值。

我有一个过于简化的库数据库,有问题的表格是boakloanbookcopy。 在bookloan我有bookcopy的外键,我有一个isAvailable列。此列的默认值为1(true),在我的bookloan表中有一个新条目意味着借用了一本书的副本,并且它已不再可用,所以我想更改此记录的isAvailable为0(false)。

我尝试用两种方式为它写一个触发器,但没有任何效果。

这是我的最后一段代码:

    USE `libdb`;

DELIMITER $$

DROP TRIGGER IF EXISTS libdb.bookcopy_update$$
USE `libdb`$$
CREATE DEFINER=`root`@`localhost` TRIGGER `libdb`.`bookcopy_update`
BEFORE INSERT 
ON `bookloan` FOR EACH ROW

BEGIN 

UPDATE bookcopy 
SET bookcopy.isAvailable = 0
WHERE bookcopy.isAvailable = 1 
AND bookcopy.idBookCopy = bookloan.BookCopy_idBookCopyFK;


END$$
DELIMITER ;

有人可以帮忙完成这项工作吗?

使用当前版本,我收到以下错误:ERROR 1054: 1054: Unknown column 'bookloan.BookCopy_idBookCopyFK' in 'where clause'

1 个答案:

答案 0 :(得分:1)

您收到该错误,因为在此查询中(来自您的触发器主体):

UPDATE bookcopy 
SET bookcopy.isAvailable = 0
WHERE bookcopy.isAvailable = 1 
AND bookcopy.idBookCopy = bookloan.BookCopy_idBookCopyFK;

没有定义bookloan

bookloan.BookCopy_idBookCopyFK替换为NEW.BookCopy_idBookCopyFK