gpt4 book ai didi

MySQL AFTER 更新触发器与 New.col<> OLD.col

转载 作者:行者123 更新时间:2023-11-30 22:50:49 24 4
gpt4 key购买 nike

此处的目标是根据条件更新文本字段并将其从一个表连接到另一个表。当文本列被用户表单中的某些文本更新时,运行更新后触发器。

触发器运行但更新所有列,而不仅仅是已更改的列。试图了解如何只更新正确的行。

这是我目前所拥有的—— SQLFiddle

| ID | SUBID | SWNOTES |
|----|-------|---------| Table 1
| 1 | 40 | test |
| 2 | 60 | |



| ID | SUBID | CONTENT | SWFLAG |
|----|-------|---------|--------|
| 1 | 40 | hello | 0 | Table 2
| 2 | 60 | nothing | 0 |


CREATE TRIGGER `updatecontentnotes` AFTER UPDATE ON `tab1`
FOR EACH ROW
BEGIN

IF New.swnotes <> OLD.swnotes
THEN
Update `tab2`
Inner Join `tab1` ON `tab2`.`subid` = `tab1`.`subid`
Set `tab2`.`swflag` = '1',`tab2`.`content` = CONCAT(`tab2`.`content`, `tab1`.`swnotes`)

Where `tab2`.`subid` = `tab1`.`subid` AND `tab2`.`swflag` = '0';

END IF;

END//

如果我用 say 更新表格:

  Update `tab1`
set `swnotes` = "new"
where `subid` = '60'

我明白了:

| ID | SUBID |    CONTENT | SWFLAG |
|----|-------|------------|--------|
| 1 | 40 | hellotest | 1 |
| 2 | 60 | nothingnew | 1 |

现在我知道它正在按照我的指示去做。我只想更新更新的行。感谢您对此提供的任何帮助。

最佳答案

由于触发器的内容将针对 tab1 上的每一行运行,因此您需要在 WHERE 子句中进行更多限制,以便它只会影响那些行已更新。现在它更新 tab2

上的每一行

尝试将此添加到您的触发器 SQL:

来自:

Where `tab2`.`subid` = `tab1`.`subid` AND `tab2`.`swflag` = '0';

收件人:

Where `tab2`.`subid` = `tab1`.`subid` AND `tab2`.`swflag` = '0' AND `tab2`.`id` = OLD.id;

这会产生我认为您正在寻找的结果:

| ID | SUBID |    CONTENT | SWFLAG |
|----|-------|------------|--------|
| 1 | 40 | hello | 0 |
| 2 | 60 | nothingnew | 1 |

更新后的 SQLFiddle 在这里:

http://sqlfiddle.com/#!2/9fa2d2/1/0

关于MySQL AFTER 更新触发器与 New.col<> OLD.col,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28177232/

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