如果我没有更新该列,则在 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 ;
我正在使用 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 ;