【问题标题】:Creating a trigger which performs an update on another table创建对另一个表执行更新的触发器
【发布时间】:2016-12-11 15:43:42
【问题描述】:

我有两张桌子——一张叫bookloan,另一张叫bookcopy。在bookloan 表中,我有一个名为dateReturneddatetime 字段,默认情况下为null,并且仅在归还书籍时填充。 在另一个表 (bookcopy) 中,我有一个可用的字段,当取一本书时,该字段的值更改为 0。现在我想在还书时将其改回1(当我的datetime 字段不再是null 并已更新时)。

我的问题是我用于此目的的代码(发布在下面)由于某种原因无法正常工作。

P.S 我没有收到任何错误。

USE `libdb`;

DELIMITER $$

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



BEGIN 

IF NEW.dateReturned <=> OLD.dateReturned THEN
UPDATE bookcopy 
SET  isAvailable = 1
WHERE bookcopy.idBookCopy = NEW.BookCopy_idBookCopyFK;
END IF;



END$$
DELIMITER ;

【问题讨论】:

  • 请包含触发器的完整代码。
  • 完成,我编辑了我的问题。

标签: mysql sql database triggers


【解决方案1】:

&lt;=&gt; operator 是一个空安全的 equals 运算符,尽管根据描述您需要“不等于”运算符。在这里,具体来说,如果您只想检查它是否从 null 变为非 null 值(反之亦然),您可以使用逻辑 xor operator

IF (NEW.dateReturned IS NULL) XOR (OLD.dateReturned IS NULL) THEN

【讨论】:

  • 谢谢,这为我解决了。显然我的情况不对:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2020-08-23
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多