我正在尝试在我的数据库中创建一个简单的triger功能,所以当另一个表更新时,我可以更改其中一个表中的值。
我有一个过于简化的库数据库,有问题的表格是boakloan
和bookcopy
。
在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'
答案 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
。