[前][次][番号順一覧][スレッド一覧]

mysql:16355

From: "yoku ts." <"yoku ts." <yoku0825@xxxxxxxxxx>>
Date: Fri, 22 Jul 2016 12:31:09 +0900
Subject: [mysql 16355] Re: [mysql 16354] 一つのイベントに対して複数のSQLを実行するTRIGGERを定義したい

こんにちは、yoku0825といいます。

CREATE TRIGGERの文法は合っているような気がします。

> Error Code: 1235. This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'    0.016 sec


そのテーブルには既にAFTER UPDATEトリガーが設定されています。
それが予期したものでない(今設定されているAFTER UPDATEトリガーは何度かやっているうちに残っちゃった)ものであれば、
DROP TRIGGERで消してあげてください。


現在設定されているAFTER UPDATEトリガーが消せないものの場合、

1) MySQL 5.7はAFTER UPDATEトリガーを複数セットできます
2) 今あるAFTER UPDATEトリガーの中に新しいトリガーのステートメントを混ぜます
3) 新しい方をBEFORE UPDATEトリガーで代用できないか検討します

のうちどれを選ぶことになるかと思います。


yoku0825,

2016年7月22日 12:16 ochiai <s.ochiai@xxxxxxxxxx>:
> MLの皆様、お世話になります。

>

> CREATE TRIGGERで困っています。

> やりたいことは、親テーブルとその明細のテーブルがあり、明細テーブルのいず れかの行の値(data)を更新したら、更新のタイムスタンプを親 テーブルと子

> テーブルのそれぞれに記録するということです。

> よろしくお願いします。

>

> 一つのイベントに対して複数のSQLを実行するTRIGGERを定義したいのですが、う まくできません。

> 調べてみたら、複数のサイトにCREATE TRIGGER文をDELIMITER句で挟めば複数の

> SQL文を定義できる、と書いてありましたので、その通りにやりましたがうまく いきません。

>

> 1)create triggerを delimiter $$ 〜 $$ delimiter;でくくる

> 2)複数のSQL文をBEGIN 〜 ENDでくくる

> 参考にしたサイト:http://wikiwiki.jp/yonkoushi2/?MySQL%2Fdbonline%2Fview

>

> 以下のようにMySQL Workbench(6.3Community)のSQLエディターで下記のSQLを実

> 行し、エラーなくトリガーが作成されますが、トリガーの対象とした テーブル の行を更新しようとすると下記のエラーが発生し、更新ができません。

> なお、親テーブルと明細テーブルとの連携キーは parent_table.id=child_table.p_idです。

>

> <トリガー作成>

> DELIMITER $$

>

> CREATE DEFINER=`root`@`localhost` TRIGGER `child_table_AFTER_UPDATE` AFTER

> UPDATE ON `child_table` FOR EACH ROW

> BEGIN

> update parent_table set lastupdtime = sysdate() where id = old.p_id;

> update child_table set lastupdtime = sysdate() where new.data <> old.data;

> END;

> $$

>

> DELIMITER ;

>

> <エラーメッセージ>

> CREATE DEFINER=`root`@`localhost` TRIGGER `child_table_AFTER_UPDATE` AFTER

> UPDATE ON `child_table` FOR EACH ROW

> BEGIN

> update parent_table set lastupdtime = sysdate() where id = old.p_id;

> update child_table set lastupdtime = sysdate() where new.data = old.data;

> END;

> Error Code: 1235. This version of MySQL doesn't yet support 'multiple

> triggers with the same action time and event for one table'    0.016 sec

>

> <show triggers;のstatementの値>

> BEGIN

> update parent_table set lastupdtime = sysdate() where id = old.p_id;

> update child_table set lastupdtime = sysdate() where new.data = old.data;

> END;

>

> エラーメッセージもshow triggersの結果もDELIMITERが反映されていません。

> エラーメッセージに“This version of MySQL doesn't yet support 'multiple

> triggers...”とあるので、5.6.31では対応していないということでしょうか?対 策あるいは対応しているバージョンを教えてください。

>

>

> 当方の実行環境:

> MySQL version:5.6.31-log MySQL Community Server(GPL)

>       Compiled For: win32(AMD64)

>

> MySQL Workbench(6.3Community)

>

> OS:Windows 7 Professional 32bit

>

>


[前][次][番号順一覧][スレッド一覧]

     16354 2016-07-22 12:16 [ochiai <s.ochiai@xxx] 一つのイベントに対して複数のSQLを実行するTRIGGERを定義したい
->   16355 2016-07-22 12:31 ┗["yoku ts." <yoku0825] Re: [mysql 16354] 一つのイベントに対して複数のSQLを実行するTRIGGERを定義したい
     16356 2016-07-27 11:19  ┗[ochiai <s.ochiai@xxx] Re: [mysql 16355] Re: [mysql 16354] =e4=b8e3a4のイベントに対して複数のSQLを実行するTRIGGERを定義したい
     16357 2016-07-27 12:00   ┗["yoku ts." <yoku0825] Re: [mysql 16356] Re: [mysql 16355] Re: [mysql 16354] 一つのイベントに対して複数のSQLを実行するTRIGGERを定義したい
     16358 2016-07-27 15:29    ┗[ochiai <s.ochiai@xxx] Re: [mysql 16357] Re: [mysql 16356] Re: [mysql 16355] Re: [mysql 16354] 一つのイベントに対して複数のSQLを実行するTRIGGERを定義したい
     16359 2016-07-27 15:37     ┗["yoku ts." <yoku0825] Re: [mysql 16358] Re: [mysql 16357] Re: [mysql 16356] Re: [mysql 16355] Re: [mysql 16354] 一つのイベントに対して複数のSQLを実行するTRIGGERを定義したい
     16360 2016-07-27 15:47      ┗[ochiai <s.ochiai@xxx] Re: [mysql 16359] Re: [mysql 16358] Re: [mysql 16357] Re: [mysql 16356] Re: [mysql 16355] Re: [mysql 16354] =e4=b8つのイベントに対して複数のS