无法在phpmyadmin中创建触发器mysql
问题描述:
我试图通过将行插入到phpmyadmin中的数据库后组合字段来创建ID。我得到一个错误下列触发语句的第3行:无法在phpmyadmin中创建触发器mysql
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
OK,所以我得到的查询执行的怎么样。触发器已经创建,但我不认为它做它应该做的。记录不会更新。下面是新的代码:
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
答
有几件事情要考虑:
- 使用
BEFORE
事件触发的,而不是AFTER
。这样,您可以在插入行的同时设置值scanID
。 - 使用
NEW
关键字可以访问所插入行的字段。 - 由于这是一个语句触发器现在您不需要更改分隔符并使用
BEGIN ... END
块。 - 您最有可能使用
REPLACE
作为scanDate。
尝试
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演示
+0
@kurious您非常欢迎。祝你好运! – peterm 2015-04-04 01:26:41
什么是错误讯息?还要提供完整的触发语句 – 2015-04-03 16:15:40
,您仍然需要在触发器内终止语句,即使用分号。我不确定你想要做什么更新声明。它是什么样的触发器? – 2015-04-03 16:16:49
我想'scanID'为来自scanContent,operatorID,deviceID,scanDate和scanTime的数字组合。我从Android设备获取这些细节,并在这些细节的scanID列中插入一个空白''。插入后,我希望表格更新为新创建的行的触发器。 – kurious 2015-04-03 16:25:35