插入触发器后的Mysql - 从表中删除

时间:2015-11-23 04:49:15

标签: mysql database triggers

抱歉我的英语不好。我不是一个优秀的英语演讲者。

所以,我有两个这样的表:

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的新手。

非常感谢您的回答。

0 个答案:

没有答案