gpt4 book ai didi

MySQL 返回更新后的值

转载 作者:行者123 更新时间:2023-11-29 18:43:36 25 4
gpt4 key购买 nike

当更新 MySQL 中的显式行时,是否可以让 UPDATE 查询返回实际更新的值?

+----+-------+---------------------+
| id | name | last_changed_values |
+----+-------+---------------------+
| 1 | Hans | (null) |
| 2 | Joe | (null) |
| 3 | Ralph | (null) |
+----+-------+---------------------+

UPDATE user SET user_name = "Bertil"WHERE user_id = 1 将输入 Bertillast_changed_values

+----+-------+---------------------+
| id | name | last_changed_values |
+----+-------+---------------------+
| 1 | Bertil| Bertil |
| 2 | Joe | (null) |
| 3 | Ralph | (null) |
+----+-------+---------------------+

在 GaborSch 的帮助下,我创建了这个 sqlfiddle .

CREATE TRIGGER names_BU BEFORE UPDATE ON `names`
FOR EACH ROW BEGIN
SET NEW.last_changed_values = CONCAT_WS(',', IF(new.name = old.name, NULL, new.name));
END/

但这不会SET last_changed_valuesnew.name(在本例中为Bertil)。有什么方法可以获取新值吗?

更新存储过程似乎区分大小写。更改为

SET NEW.last_changed_values = CONCAT_WS(',', IF(NEW.name = OLD.name, NULL, NEW.name));

按预期工作。

最佳答案

不,MySQL 中没有这样的选项。请记住,一条更新可以通过一条指令更改多行。

但是,您可以创建一个 BEFORE UPDATE 触发器,并逐一比较这些值,并将更改的列名称保存到 last_changed_values 列,例如这个:

ALTER TABLE mytable ADD COLUMN last_changed_values VARCHAR(200);

DELIMITER $$
CREATE TRIGGER `mytable_BU` BEFORE UPDATE ON `mytable`
FOR EACH ROW BEGIN
SET NEW.last_changed_values = CONCAT_WS(',', IF(new.col1 = old.col1, NULL, 'col1'), IF(new.col2 = old.col2, NULL, 'col2'), IF(new.col3 = old.col3, NULL, 'col3'));
END$$
DELIMITER ;

如果你执行这样的语句

UPDATE mytable SET col1=..., col2=...
WHERE id=1;

然后你可以像这样查询

SELECT last_changed_values FROM mytable 
WHERE id=1;

关于MySQL 返回更新后的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44767234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com