【问题标题】:How to properly create a trigger in workbench?如何在工作台中正确创建触发器?
【发布时间】:2017-04-26 02:47:46
【问题描述】:

我正在尝试在我的数据库中创建一个简单的触发器功能,以便在更新另一个表时更改其中一个表中的值。

我有一个过于简单的图书馆数据库,有问题的表是boakloanbookcopy。 在bookloan 中,我有一个指向bookcopy 的外键,其中我有一个isAvailable 列。此列的默认值为 1(true),并且在我的bookloan 表中有一个新条目将意味着一本书的副本已被借阅,并且不再可用,所以我想更改 @987654327 的值@ 为 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'

【问题讨论】:

  • 感谢您的评论。是的,我在此处发布之前更改了代码中的这一部分,但它仍然无法正常工作。我现在将编辑问题。

标签: mysql sql database mysql-workbench


【解决方案1】:

您收到该错误是因为在此查询中(来自您的触发器正文):

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

没有定义bookloan

bookloan.BookCopy_idBookCopyFK 替换为NEW.BookCopy_idBookCopyFK

【讨论】:

  • 谢谢,这让它工作了 :) 有趣的是,我在早期版本中有这个代码,但其他事情是错误的。显然我不知道我在做什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多