mysql - 创建一个对另一个表执行更新的触发器

标签 mysql sql database triggers

我有两个表 - 一个名为 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 ;

最佳答案

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

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

关于mysql - 创建一个对另一个表执行更新的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41087940/

相关文章:

php - 如何从 mysql 数据库中删除重复(字段)条目?

SQL插入接口(interface) slice

sql - 哪个查询计划更快/更好

java - SQLiteDatabase的execSQL(String sql)函数详解

database - unity 使用 SQLite 数据库构建 webGL

php - 使用 PHP 从 MySQL 数据库中获取数据,以表格形式显示以供编辑

mysql - 如果没有帖子,在查询结果中显示用户?

php - 我如何在 php 中获取 mysql 警告消息(不是错误)

mysql - 如何在整个数据库中查找外键违规? (我目前正在使用 MySQL)

database - 结合地理空间索引的多维搜索