2015-04-03 59 views
0

我试图通过将行插入到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 
+0

什么是错误讯息?还要提供完整的触发语句 – 2015-04-03 16:15:40

+0

,您仍然需要在触发器内终止语句,即使用分号。我不确定你想要做什么更新声明。它是什么样的触发器? – 2015-04-03 16:16:49

+0

我想'scanID'为来自scanContent,operatorID,deviceID,scanDate和scanTime的数字组合。我从Android设备获取这些细节,并在这些细节的scanID列中插入一个空白''。插入后,我希望表格更新为新创建的行的触发器。 – kurious 2015-04-03 16:25:35

回答

0

有几件事情要考虑:

  1. 使用BEFORE事件触发的,而不是AFTER。这样,您可以在插入行的同时设置值scanID
  2. 使用NEW关键字可以访问所插入行的字段。
  3. 由于这是一个语句触发器现在您不需要更改分隔符并使用BEGIN ... END块。
  4. 您最有可能使用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