所以,我有两个这样的表:
CREATE TABLE `query` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`fk_instructor_id` int(11) unsigned NOT NULL,
`delegate_name` varchar(200) DEFAULT NULL,
`material` varchar(20) NOT NULL,
`record_date` datetime DEFAULT NULL,
`recorded_by` int(11) unsigned NOT NULL,
`received_date` datetime DEFAULT NULL,
`received_by` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
和此:
CREATE TABLE `archive` (
`id` int(11) unsigned NOT NULL,
`fk_instructor_id` int(11) unsigned NOT NULL,
`delegate_name` varchar(200) DEFAULT NULL,
`material` varchar(20) NOT NULL,
`record_date` datetime DEFAULT NULL,
`recorded_by` int(11) unsigned NOT NULL,
`received_date` datetime DEFAULT NULL,
`received_by` int(11) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
表存档是查询的镜像表。
当receive_by> 0时,我需要将整个记录移动到存档表。
为此我在更新后在表查询上写了一个触发器。
触发器听起来像这样:
CREATE TRIGGER `close_query` AFTER UPDATE ON `query`
FOR EACH ROW
BEGIN
IF New.`received_by` > 0 THEN
INSERT into `archive` SELECT * FROM `query` where `id` = OLD.`id`;
END IF
END$$
DELIMITER ;
现在,我知道由于insert into select
公牛掷骰子,这个触发器编码错误。但这不是我的问题。
我还希望将记录移至archive
以从query
删除记录。为此,我在插入后创建了archive
的触发器。
此触发器是:
CREATE TRIGGER `AfterInsertArchive` AFTER INSERT ON `archive`
FOR EACH ROW
BEGIN
delete from `query` where `id` = NEW.`id`;
END$$
DELIMITER ;
现在,问题是我遇到了错误,如下所示:
“无法更新存储函数/触发器中的表'查询',因为它已被调用此存储函数/触发器的语句使用。”
请帮帮我!我不知道该怎么做,因为我没有关于这个触发器的循环。第一次触发尝试在更新后尝试将更新插入archive
,第二次触发器在将记录插入query
表后从archive
表中删除记录。我不明白,我提到我是mysql的新手。
非常感谢您的回答。