如果我没有更新该列,则在 MySQL 中获取 NEW.colname 的现有值触发器

Getting existing value for NEW.colname in MySQL trigger if I didn't update that column

我正在使用 mysql 8.0.23

我的table

CRETAE TABLE sample_table(
    id INT AUTO_INCREMENT PRIMARY KEY,
    col1 VARCHAR(10) DEFAULT NULL,
    col2 VARCHAR(10) DEFAULT NULL
);

让我们插入一行

INSERT INTO sample_table(col1, col2) VALUES('aaa','bbb');

Table插入后

id col1 col2
1 aaa bbb

更新前触发 table

DELIMITER $$
CREATE TRIGGER sample_trigger BEFORE UPDATE ON sample_table
FOR EACH ROW 
BEGIN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = NEW.col1;
END $$
DELIMITER ;

更新声明

UPDATE sample_table SET col2 = 'ccc' WHERE id = 1;

这里我只更新了 col2 但我得到了 message_text 的“aaa”,这背后的原因是什么?

我只想为 col1 的每次更新插入 col1 值。

我无法在触发器中添加对 old.col1 <> new.col1 的检查。在某些情况下,我可能会得到相同的值,然后该值也应该插入到另一个 table.

如何实现?请帮我。非常感谢。

OLD 有 all 行的旧值和 NEW all 列。

所以检查新旧是否不同

DELIMITER $$
CREATE TRIGGER sample_trigger BEFORE UPDATE ON sample_table
FOR EACH ROW 
BEGIN
    IF OLD.col1 <> NEW.col1 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = NEW.col1;
    END IF;
END $$
DELIMITER ;