2015-04-03 91 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