gpt4 book ai didi

mysql - 无法在 phpmyadmin 的 mysql 中创建触发器

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

在 phpmyadmin 中将一行插入数据库后,我尝试通过组合字段来创建 ID。我在以下触发器语句的第 3 行收到错误:

DROP TRIGGER IF EXISTS `scanID2`;
CREATE DEFINER=`root`@`localhost`
TRIGGER `scanID2`
AFTER INSERT ON db_name.`scan_data`
FOR EACH ROW
BEGIN
UPDATE db_name.scan_data
SET @data1 = concat(RIGHT(scanContent,2), RIGHT(operatorID,2), RIGHT(deviceID,2), RIGHT (scanDate, '-', ''), REPLACE (scanTime, ':', ''));
INSERT INTO db_name.scan_data(scanID) VALUES (@data1);
END
//

错误是:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE DEFINER=`root`@`localhost`
TRIGGER `scanID2`
AFTER INSERT ON db_name' at line 2

好的,所以我想出了如何执行查询。触发器已创建,但我认为它没有执行应有的操作。记录不会更新。这是新代码:

BEGIN 
SET @data1 = concat(RIGHT(scanContent,2), RIGHT(operatorID,2), RIGHT(deviceID,2), REPLACE (scanDate, '-', ''), REPLACE (scanTime, ':', ''));
INSERT INTO vacseen1_connect.scan_data(scanID) VALUES (@data1);
END

最佳答案

有几件事需要考虑:

  1. 使用 BEFORE 事件作为触发器,而不是 AFTER。这样您就可以在插入行的同时设置 scanID 的值。
  2. 使用 NEW 关键字访问正在插入的行的字段。
  3. 由于它是一个语句触发器,因此您现在无需更改分隔符并使用 BEGIN ... END block 。
  4. 您很可能打算对 scanDate 使用 REPLACE

尝试

CREATE TRIGGER scanID2 
BEFORE INSERT ON scan_data
FOR EACH ROW
SET NEW.scanID = CONCAT(
RIGHT(NEW.scanContent, 2),
RIGHT(NEW.operatorID, 2),
RIGHT(NEW.deviceID, 2),
REPLACE(NEW.scanDate, '-', ''),
REPLACE (NEW.scanTime, ':', '')
);

这是一个 SQLFiddle 演示

关于mysql - 无法在 phpmyadmin 的 mysql 中创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29435723/

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