更新触发器之前的MySql和SQL设置不同表/列的更新无法更新存储函数/触发器中的表
P粉677684876
P粉677684876 2023-09-14 21:54:36
0
1
521

我有一个连接表,它与 n:m 关系的 2 个表(A 和 C)连接。连接表 (B) 也保存了一些信息。

A ----- B ------ C

在表 A 中,我有一个 when_modified 列,如果有任何更改,我总是希望保持最新状态。这应该包括表 B 上的更改。

所以我在表 B 上有一个更新前触发器,其中包含以下查询

UPDATE A SET when_modified = NOW() WHERE id = NEW.id;

问题是,如果我现在执行更新查询(在 B 上进行联接),我会收到以下错误

无法更新存储函数/触发器中的表“A”,因为它已被调用此存储函数/触发器的语句使用。

Update B vv JOIN A v on vv.id = v.id SET vv.block = 1 WHERE v.status = 'finished'

P粉677684876
P粉677684876

全部回复(1)
P粉950128819

您需要重写 UPDATE 语句。

您不能在触发器中进行更新,否则可能会发生这种情况。无限循环

但是简单的改变就会产生同样的效果

CREATE TABLE A (id int, status  varchar(10), when_modified  datetime)
INSERT INTO A VALUES (1,'finished',now())
CREATE TABLE B (id int, block int)
INSERT INTO B VALUES(1,0)
Update B vv JOIN A  v on vv.id = v.id SET vv.block = 1, v.when_modified = NOW()  WHERE v.status = 'finished'
SELECT * FROM A
id 状态 when_modified
1 完成 2023-05-15 20:31:15
SELECT * FROM B
id
1 1

小提琴

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!