2016-11-08 9 views
0

こんにちは私はトリガーに問題があります。どのように構文エラーを修正できますか?2つのIFブロックを持つトリガー

CREATE TRIGGER `C_edit` AFTER UPDATE ON `client` 
FOR EACH ROW 
IF OLD.name != NEW.name THEN 
INSERT INTO `change`(`id_user`, `table`, `column`, `id`, `status`, `before`, `now`) VALUES (OLD.id_user_edit, 'client', 'name', OLD.id_client, '4', OLD.name, NEW.name); 
END IF; 
IF OLD.name_sql != NEW.name_sql THEN 
INSERT INTO `change`(`id_user`, `table`, `column`, `id`, `status`, `before`, `now`) VALUES (OLD.id_user_edit, 'client', 'name_sql', OLD.id_client, '4', OLD.name_sql, NEW.name_sql); 
END IF; 
error: #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 

答えて

0

あなたは、トリガーの体内に複数のステートメントを使用しているので、あなたは区切り文字を変更するdelimiterの文と一緒に、MySQLのbegin ... end compound statement syntaxを使用する必要があります。

delimiter // 
CREATE TRIGGER `C_edit` AFTER UPDATE ON `client` 
FOR EACH ROW 
    BEGIN 
     IF OLD.name != NEW.name THEN 
      INSERT INTO `change`(`id_user`, `table`, `column`, `id`, `status`, `before`, `now`) VALUES (OLD.id_user_edit, 'client', 'name', OLD.id_client, '4', OLD.name, NEW.name); 
     END IF; 
     IF OLD.name_sql != NEW.name_sql THEN 
      INSERT INTO `change`(`id_user`, `table`, `column`, `id`, `status`, `before`, `now`) VALUES (OLD.id_user_edit, 'client', 'name_sql', OLD.id_client, '4', OLD.name_sql, NEW.name_sql); 
     END IF; 
    END// 
delimiter ; 
0

のようなBEGIN/ENDブロックを使用してみてください以下:

DELIMITER $$ 
CREATE TRIGGER `C_edit` AFTER UPDATE ON `client` 
    FOR EACH ROW 
BEGIN 
IF OLD.name != NEW.name THEN 
    INSERT INTO `change`(`id_user`, `table`, `column`, `id`, `status`, `before`, `now`) VALUES (OLD.id_user_edit, 'client', 'name', OLD.id_client, '4', OLD.name, NEW.name); 
END IF; 
IF OLD.name_sql != NEW.name_sql THEN 
    INSERT INTO `change`(`id_user`, `table`, `column`, `id`, `status`, `before`, `now`) VALUES (OLD.id_user_edit, 'client', 'name_sql', OLD.id_client, '4', OLD.name_sql, NEW.name_sql); 
END IF; 
END $$ 
DELIMITER; 

またはDELIMITER

なし

PHPMyAdminにはDELIMITERは必要ありませんが、MySQL Workbenchなどは必要ありません。

+0

phpmyadmin guiおよびphpmyadminで使用する区切り文字を設定して、区切り文字をバックグラウンドでリセットすることができるためです。 :) – Shadow

関連する問題