2012-04-20 17 views
0

私は、このMySQLのテーブルを持っている:再帰更新トリガー

CREATE TABLE IF NOT EXISTS `activities` (
`id` INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, 
`name` CHAR(255) NOT NULL, 
`status` ENUM('open','progress','close'), 
`date_begin` DATE, 
`date_finish` DATE, 
`progress` TINYINT, 
`reliance` INTEGER, 
`parent` INTEGER, 
FOREIGN KEY(owner) REFERENCES users(id) ON UPDATE CASCADE ON DELETE SET NULL, 
FOREIGN KEY(reliance) REFERENCES activities(id) ON UPDATE CASCADE ON DELETE SET NULL, 
FOREIGN KEY(parent) REFERENCES activities(id) ON UPDATE CASCADE ON DELETE SET NULL 
)ENGINE = INNODB; 

私は1つの活動のdate_beginを更新する際に私の問題があります。事実、私は更新されたアクティビティに依存するすべてのアクティビティの開始日を更新したいと思います。 mysqlに再帰トリガを強制することはできますか?

+0

いいえ、mysqlは反復トリガー –

答えて

0

このような何かが、あなたは、MySQLの最新バージョンにしている場合は、少なくとも、動作するはずです:

delimiter | 

CREATE TRIGGER activitiesUpdateReliantAndChildren BEFORE UPDATE ON 'activities' 
FOR EACH ROW 
BEGIN 

update 'activities' 
set date_begin = NEW.date_begin 
where reliance = NEW.id; 

update 'activities' 
set date_begin = NEW.date_begin 
where parent = NEW.id; 

END; 
| 

delimiter ; 
+0

をサポートできませんが、これは再帰トリガーです。このエラーが発生しました[コード]ストアドファンクション/トリガーでテーブル 'mytable'を更新できません。このストアドファンクション/トリガーを呼び出すステートメントですでに使用されているためです。 – Lic

+0

残念ですが、私の回答を編集してください。 Beforeはまだ新しいmetaDBへのアクセス権を持っている必要があり、再帰的な結果をもたらすべきではありません。 –

1

トリガーが働くかもしれないが...再帰トリガを作成するために良い練習ではありません!あなたがしなければならないことがあれば... 2回だけでなく100回も申し込む前に考えてください!彼らは時々良いよりも害をもたらす可能性があります。