gpt4 book ai didi

mysql - 无法更新存储函数/触发器中的表 'blad',因为它已被调用此存储函数/触发器的语句使用

转载 作者:行者123 更新时间:2023-12-01 09:27:20 25 4
gpt4 key购买 nike

我有 table :

    CREATE TABLE blad
(
id INT NOT NULL UNIQUE AUTO_INCREMENT,
komunikatBledu TINYTEXT,
czujnik TINYTEXT,
aktualny BOOLEAN DEFAULT TRUE,
zakoncz BOOLEAN DEFAULT FALSE,
czas DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(id)
);

示例记录:

INSERT INTO blad (komunikatBledu, czujnik, aktualny, zakoncz) VALUES ('No RTC', 'czujnikPiec', true, false)

如果 zakoncz- 为真,我希望记录插入更改 fasle 上的所有记录。

我写了触发器:

BEGIN
IF (((SELECT COUNT(*) FROM blad WHERE komunikatBledu = NEW.komunikatBledu AND czujnik = NEW.czujnik AND aktualny = true) > 1) AND (NEW.zakoncz = true)) THEN
UPDATE blad
SET aktualny = false
WHERE id IN (SELECT Id FROM (SELECT id FROM blad WHERE komunikatBledu = NEW.komunikatBledu AND czujnik = NEW.czujnik AND aktualny = true AND id != (SELECT MAX(id) FROM blad)) as t);
END IF;
END

当我插入时:

INSERT INTO blad (komunikatBledu, czujnik, aktualny, zakoncz) VALUES ('No RTC', 'czujnikPiec', false, true)

我得到错误:

Can't update table 'blad' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

请帮忙

最佳答案

错误信息可以相信。您不能插入/更新/删除触发器执行的同一个表,因为它可能会导致无限循环。

在你的情况下,你不能用触发器做你想做的事。您必须使用应用程序代码执行此操作。这是伪代码:

$aktualny = false;
$komunikatBledu = 'No RTC';
$czujnik = 'czujnikPiec';

IF $aktualny == true THEN
UPDATE blad SET aktualny = false
WHERE komunikatBledu = $komunikatBledu
AND czujnik = $czujnik;
END

INSERT INTO blad (komunikatBledu, czujnik, aktualny, zakoncz)
VALUES ($komunikatBledu, $czujnik, $aktualny, true);

此代码不是文字代码。它只是为了描述您需要它执行的逻辑。我将留给您将其改编为您自己的客户端编程语言。

关于mysql - 无法更新存储函数/触发器中的表 'blad',因为它已被调用此存储函数/触发器的语句使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60030257/

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