gpt4 book ai didi

MySQL 使用 before 触发器更新同一个表

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

我是一名正在学习 MySQL 的学生,目前在使用触发器检查插入时遇到问题。

我有下表

CREATE TABLE classes
(Class CHAR(15) PRIMARY KEY,
cType CHAR(2) NOT NULL,
Country VARCHAR(12) NOT NULL,
numGuns INT(2) NOT NULL,
Bore INT(2) NOT NULL,
Displacement INT(6) NOT NULL);

问题要求我在此数据库上编写以下基于属性的检查:

  • 枪支数量必须在 8 到 12 支之间。

我的触发器目前看起来像这样

delimiter $$
CREATE TRIGGER chkGun
BEFORE INSERT ON classes
FOR EACH ROW
BEGIN
IF NEW.numGuns >= 8 AND NEW.numGuns <= 12 THEN
UPDATE classes
SET numGuns = NEW.numGuns;
ELSE
SET NEW.numGuns = NULL;
END IF;
END$$
DELIMITER ;

我不断收到错误消息

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

从上面的错误消息中我知道我无法更新触发器当前正在使用的同一个表。
有没有办法更新同一个表中的属性?

最佳答案

如果枪支数量正确,则不要进行更新,就让它过去吧。如果枪支数量太少或太多,请将其设置为空。

触发器在正常更新之前触发,您对 NEW.* 所做的任何更改都将被写入。

关于MySQL 使用 before 触发器更新同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29360659/

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