2012-10-30 78 views
0

我要在xampp中創建觸發器。在MySql中創建觸發器時出錯5.5.27

CREATE TRIGGER testref BEFORE INSERT ON test1 
FOR EACH ROW 
BEGIN 
INSERT INTO test2 SET a2 = NEW.a1; 
DELETE FROM test3 WHERE a3 = NEW.a1; 
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; 
END; 

,但我有錯誤:

CREATE TRIGGER testref BEFORE INSERT ON test1 
    FOR EACH 
    ROW 
    BEGIN 
    INSERT INTO test2 
    SET a2 = NEW.a1; 

MySQL said: Documentation 
#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 '' at line 4 

之前,我創建4個表:

CREATE TABLE test1(a1 INT); 
CREATE TABLE test2(a2 INT); 
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); 
CREATE TABLE test4(
    a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    b4 INT DEFAULT 0 
); 

請幫助我。萬分感謝!

回答

0

首先更改分隔符,否則您的過程中的分號會破壞語法。在MySQL文檔中查看下面這個示例的下一個例子page on creating procedures(複製如下,以節省您的時間)。

mysql> delimiter // 

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) 
    -> BEGIN 
    -> SELECT COUNT(*) INTO param1 FROM t; 
    -> END// 
Query OK, 0 rows affected (0.00 sec) 

mysql> delimiter ; 

mysql> CALL simpleproc(@a); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @a; 
+------+ 
| @a | 
+------+ 
| 3 | 
+------+ 
1 row in set (0.00 sec) 

更新:也許下面...

DELIMITER // 
CREATE TRIGGER testref BEFORE INSERT ON test1 
FOR EACH ROW 
BEGIN 
INSERT INTO test2 SET a2 = NEW.a1; 
DELETE FROM test3 WHERE a3 = NEW.a1; 
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; 
END// 
DELIMITER ; 
+0

我試圖在phpmyadmin中創建它。我如何解決它? –

+0

增加了一個更明確的例子。我不知道phpmyadmin如何與事物混淆。 –

0

看一看如果在您的phpMyAdmin的版本DILIMITER場,只是在SQL編輯器下方。有設置你的分隔符,例如 - 「$$」,並寫出這個SQL代碼 -

CREATE TRIGGER testref BEFORE INSERT ON test1 
FOR EACH ROW 
BEGIN 
INSERT INTO test2 SET a2 = NEW.a1; 
DELETE FROM test3 WHERE a3 = NEW.a1; 
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; 
END$$ 

如果你的phpmyadmin沒有這個選項(可以是舊版本),並且如果它是可以連接到服務器使用另一個工具,然後嘗試使用另一個MySQL客戶端,例如 - dbForge Studio for MySQL(免費快遞版)。

+0

非常感謝!我在phpmyadmin中找到它,但我仍然不知道我錯在哪裏。 –

+0

你沒有任何錯誤。這是phpmyadmin的行爲,你應該知道它。不要使用DELIMITER命令,而要使用帶有指定分隔符的結束語句。 – Devart

0

使用下面創建觸發器

delimiter | 
CREATE TRIGGER testref BEFORE INSERT ON test1 
FOR EACH ROW 
BEGIN 
INSERT INTO test2 SET a2 = NEW.a1; 
DELETE FROM test3 WHERE a3 = NEW.a1; 
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; 
END; 
| 

也就是說......你必須用分隔符..

分隔符是用來定義查詢的結尾。默認情況下它是半列(;)。這裏我們使用DELIMITER命令來更改默認分隔符,以便我們可以使用';' insdie觸發器定義