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;

私の問題は、あるアクティビティの date_begin を更新したいときです。実際、更新されたアクティビティの依存または子であるすべてのアクティビティの開始日を更新したいと思います。mysql に強制的に再帰トリガーを作成させることはできますか?

4

2 に答える 2

1

トリガーは機能するかもしれませんが、再帰的なトリガーを作成することはお勧めできません! そして、あなたがしなければならないことなら... 応募する前に2回だけでなく100回考えてください!それらは、時には善よりも害をもたらす可能性があります。

于 2013-11-15T08:32:00.017 に答える
1

少なくとも最近のバージョンの 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 ;
于 2012-04-21T23:46:08.937 に答える