gpt4 book ai didi

每当我尝试插入新记录时,MySQL 触发器都无法工作

转载 作者:行者123 更新时间:2023-11-29 13:49:36 25 4
gpt4 key购买 nike

我正在尝试重新创建从 T-SQL 到 MySQL 创建的函数,但我在使触发器工作时遇到困难。

这就是我应该做的:1.我需要创建一个函数,该函数将基于此格式创建一个专用 ID:日期 - 6 位数字代码,这将是增量的实际 ID

  1. 接下来我需要创建触发器,每当我尝试插入新记录时,该触发器都会调用我创建的函数来生成 ID。

这就是我所做的:

-- created the table first
DROP TABLE abc
Create table abc
(
IDnumber INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(32)
)

-- Function
DROP FUNCTION GenerateID

CREATE FUNCTION GenerateID (id int)
RETURNS VARCHAR(10)
RETURN CONCAT(substr((cast(CURDATE() as char(10))),3,2), '-', right(concat('000000', cast( id as char(6) ) ), 6) );


-- create the Trigger

DELIMITER ||
CREATE TRIGGER ID_Insert BEFORE INSERT ON ABC
FOR EACH ROW
BEGIN
UPDATE abc
SET abc.IDNumber = generateID(abc.IDNumber) ;
-- FROM abc
-- INNER JOIN Inserted ON abc.IDNumber = inserted.IDNumber;
END

||

我注释掉了 --FROM abc 和 --INNER JOIN 部分,因为这是我在 T-SQL 中使用的语法。我尝试在这里应用它,但出现语法错误。现在触发器已成功创建,但问题是当我现在开始插入记录时。

 insert into abc (name) values('cammie')
insert into abc (name) values('helios')
etc

我收到错误 1442,显示“无法使用触发器/函数更新表,因为它已在调用此函数/sp 的语句中使用”

你认为我缺少什么?

最佳答案

在触发器主体中,无需尝试更新已更新的表,只需使用

SET NEW.IDNumber = generateID(abc.IDNumber) ;

关于每当我尝试插入新记录时,MySQL 触发器都无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16865140/

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