gpt4 book ai didi

MySQL - 触发器删除以前的记录

转载 作者:行者123 更新时间:2023-11-29 08:39:22 25 4
gpt4 key购买 nike

我正在尝试创建一个触发器,该触发器仅允许数据库中存在一条记录,因此它将删除任何以前的记录。但目前,它不允许我插入任何内容,因为它会立即被删除。

DELIMITER $$
CREATE TRIGGER test_insert
BEFORE INSERT ON test
FOR EACH ROW BEGIN
DELETE FROM test WHERE id = NEW.id - 1;
END$$

如何删除之前(或之前所有)插入的记录?

最佳答案

“但目前,它不允许我插入任何内容,因为它会立即删除。”

实际上,当您执行 INSERT 时,触发器的执行应该抛出异常:

Error Code: 1442
Can't update table 'test' in stored function/trigger because it is
already used by statement which invoked this stored function/trigger.

(除非新版本的 MySQL 中出现了根本不同的情况。)

<小时/>

您想要执行的操作(即从您要插入的同一个表中删除行)无法在 MySQL 触发器中完成。

您可以结合使用 UNIQUE KEY 和 BEFORE INSERT 触发器来防止插入多行。 BEFORE INSERT 触发器可以设置具有唯一值的列的值如果将其上的 key 设置为静态值,则 INSERT 语句将抛出重复键(“重复条目”)异常。

然后,您可以使用 INSERT ... ON DUPLICATE KEY UPDATE ... 语句来更新除唯一 ID 之外的列的值,例如

CREATE TRIGGER `test_insert` BEFORE INSERT ON test
FOR EACH ROW BEGIN
SET NEW.id := 1;
END

ALTER TABLE test ADD UNIQUE KEY (id);

INSERT INTO test (somecol) VALUES ('someval')
ON DUPLICATE KEY UPDATE somecol = VALUES(somecol) ;

关于MySQL - 触发器删除以前的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14281343/

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