0

xamppでトリガーを作成します。

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
);

私を助けてください。本当にありがとうございました!

4

3 に答える 3

0

最初に区切り文字を変更してください。そうしないと、プロシージャ内のセミコロンによって構文が壊れます。MySQLドキュメントでのプロシージャの作成については、このページの途中の例を参照してください(時間を節約するために以下にコピーされています)。

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 ;
于 2012-10-30T03:58:43.263 に答える
0

phpmyadmin バージョンの SQL エディターのすぐ下に DILIMITER フィールドがあるかどうかを確認してください。「$$」などの区切り文字をそこに設定し、次の 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 (無料の高速版) など) を使用してみてください。

于 2012-10-30T06:33:35.237 に答える
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 コマンドを使用してデフォルトの区切り文字を変更し、';' を使用できるようにしました。インディートリガー定義

于 2012-10-30T06:53:44.607 に答える