gpt4 book ai didi

mysql UPDATE 语句逐一更新列?

转载 作者:行者123 更新时间:2023-12-04 15:10:08 24 4
gpt4 key购买 nike

我在 mysql 8 中编写了一个查询,其中在插入的重复键上,由于唯一索引,它仅在特定条件下更新受影响的行。我的条件是 started_on 列值是否已更改。所以我写了这个查询

INSERT INTO timers (
started_on,
end_on,
message,
first_alert_before_end_time,
alerts_interval,
referred_flow_instance_id,
referred_page_id,
referred_json_timer_id,
started_by_user_id
) VALUES (
'2025-01-06',
DATE_ADD('2025-01-06', INTERVAL 5184000 SECOND),
'Sta scadendo il fascicolo',
2592000,
86400,
1413,
14,
1,
79
)
ON DUPLICATE KEY
UPDATE
started_on = IF( DATE(started_on) = DATE('2025-01-01'), started_on, '2025-01-06'),
end_on = IF( DATE(started_on) = DATE('2025-01-01'), end_on, DATE_ADD('2025-01-06', INTERVAL 5184000 SECOND)),
started_by_user_id = IF( DATE(started_on) = DATE('2025-01-01'), started_by_user_id, 79),
deleted_by_user_id = IF( DATE(started_on) = DATE('2025-01-01'), deleted_by_user_id, NULL),
reminded_later_by_user_id = IF( DATE(started_on) = DATE('2025-01-01'), reminded_later_by_user_id, NULL),
deleted = IF( DATE(started_on) = DATE('2025-01-01'), deleted, 0)
;

我不会分析有效的插入,只会分析重复键部分的更新。

我注意到一个意想不到的结果:当更新中的 IF 条件为真时,只有 started_on 被更新但没有其他具有完全相同条件的列。

所以我的直觉是我的更新查询的第一行 (started_on = IF( DATE(started_on) = DATE('2025-01-01'), started_on, '2025-01-06'), 突然更新 started_on 列,因此以下条件结果为 false,因为值已更改。我尝试的是将 update started_on 的部分放在 update 中所有列的末尾,现在它们都得到了更新。

如果我的直觉是正确的,我想确定并找到确认,但在网上搜索了一下后,我一无所获。

编辑:似乎通过 mysql workbench 在顶部运行更新 started_on 的查询即使在顶部也能正常工作,但我需要使用 xdevapi 库在节点中运行它并且只有放在底部时它才有效。

最佳答案

你的直觉是正确的。
此行为记录在 13.2.13 UPDATE Statement 中举个例子:

The second assignment in the following statement sets col2 to thecurrent (updated) col1 value, not the original col1 value. The resultis that col1 and col2 have the same value. This behavior differs fromstandard SQL.

UPDATE t1 SET col1 = col1 + 1, col2 = col1;

Single-table UPDATE assignments are generally evaluated from left toright.

关于mysql UPDATE 语句逐一更新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65361117/

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