LoginSignup
1
1

More than 5 years have passed since last update.

mySQL : Create Triggerで、set文等のストアド・プロシージャを使う場合の注意事項

Posted at

MySQLでCreate Triggerを発行した際にシンタックスエラーで詰まったのでここに記載しておきます。
シチュエーションとしてはCreate Triggerに限らずストアドを実行する場合全てに当てはまりそうなので、mySQL触り始めだとみんなひっかかりそうだなーと思いまとめました。

よそに書いてあることのまとめみたいになっちゃってるんだけど、エラーで引っかかる人向けってことで。

構文例:


create trigger TriggerName
before update on TableName
for each row
begin
    set NEW.ColmnName = current_timestamp;
end

構文エラー:


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 5

結論として、本来mySQLのクエリではセミコロン[;]が終了文字として指定されているため、セミコロン記述の時点でクエリ発行が終了する。
ところが、set文等のストアドはセミコロン記載後もそのまま構文が継続するパターンがあるため(例のように)、セミコロン以外を一時的に終了文字(デリミタ)に置き換えてあげる必要がありました、という話。

修正例:

delimiter $$

create trigger TriggerName
before update on TableName
for each row
begin
    set NEW.Date = current_timestamp;
end$$ delimiter ;

修正例ではデリミタを$$に置き換えて実施してますが他の文字でももちろんOKです。
実行後、デリミタをセミコロンに戻しておきましょう。

以上

参考:

http://www.dbonline.jp/mysql/trigger/index1.html
http://youkosodododo.blog54.fc2.com/blog-entry-12.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1