1

次のことを行うMySQLトリガーを設定しようとしています。

  • 誰かがdatabaseA.billsにデータを挿入すると、databaseB.billsにその行がすでにあるかどうかが確認され、ない場合は、databaseB.billsに追加の挿入が行われます。

これが私が持っているものです:

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills
FOR EACH ROW
  BEGIN
    IF NOT EXISTS (SELECT 1 FROM databaseB.bills WHERE billNumber=NEW.billNumber) THEN
      INSERT INTO databaseB.bills (billNumber) VALUES (NEW.billNumber)
    END IF
  END;//
DELIMITER ;

問題は、mysqlコンソールまたはphpMyAdminを使用して作成できないことです。END IF 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 'END IF END' at line 6

私は何が間違っているのですか?

4

2 に答える 2

1

//区切り文字として使用していると仮定すると、トリガーの本体内のsql stmtsの最後にセミコロンを使用し、//トリガーの後に使用する必要がありますEND:

CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills
FOR EACH ROW
  BEGIN
    IF NOT EXISTS (SELECT 1 FROM databaseB.bills WHERE billNumber=NEW.billNumber) THEN
      INSERT INTO databaseB.bills (billNumber) VALUES (NEW.billNumber);
    END IF;
  END //
于 2010-05-13T17:56:56.467 に答える
1

一意のインデックスがある場合は、いつでもINSERTIGNOREを作成できます

 CREATE TRIGGER ins_bills AFTER INSERT ON databaseA.bills
    FOR EACH ROW
      BEGIN
          INSERT IGNORE INTO databaseB.bills (billNumber) VALUES (NEW.billNumber);
      END //
于 2010-05-13T18:03:50.487 に答える