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

虽然触发器可能工作......创建递归触发器不是一个好习惯!如果你觉得你必须......那么在申请之前不仅要考虑两次,而且要考虑 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 回答