mysql - 在更新MySQL触发器之前将旧记录插入到其他表中

标签 mysql triggers insert

我想在我的数据库中复制旧记录。我尝试使用触发器,但出现问题。 我正在使用 MySQL Workbench,因此我发布了以下代码:

USE `secus_21`;
DELIMITER $$

CREATE TRIGGER `tsm_tasks_BUPD` BEFORE UPDATE ON tsm_tasks FOR EACH ROW
INSERT INTO `tsm_tasks_history`
    ( `ID_task` , `ID_user` , `ID_project` , `name` , `add_time` , `comment` )
VALUES
    ( OLD.`ID` , OLD.`ID_user` , OLD.`ID_project` , OLD.`name` , NOW() , OLD.`comment` );

更新事件,添加新记录,并尝试更改某些内容。我没有收到任何错误,因此我确信添加已成功完成,但在 tsm_tasks_history 表中仍然没有任何内容。

编辑:

这里是所有的触发语句

-- Full Trigger DDL Statements
-- Note: Only CREATE TRIGGER statements are allowed
DELIMITER $$

USE `secus_21`$$

CREATE TRIGGER `tsm_tasks_BUPD` BEFORE UPDATE ON tsm_tasks FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
INSERT INTO `tsm_tasks_history`
    ( `ID_task` , `ID_user` , `ID_project` , `name` , `add_time` , `comment` )
VALUES
    ( OLD.`ID` , OLD.`ID_user` , OLD.`ID_project` , OLD.`name` , NOW() , OLD.`comment` )

$$

CREATE TRIGGER `tsm_tasks_BDEL` BEFORE DELETE ON tsm_tasks FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
INSERT INTO `tsm_tasks_history`
    ( `ID_task` , `ID_user` , `ID_project` , `name` , `add_time` , `comment` )
VALUES
    ( OLD.`ID` , OLD.`ID_user` , OLD.`ID_project` , OLD.`name` , NOW() , OLD.`comment` )

$$

最佳答案

您将分隔符更改为 $$,但未使用 $$ 完成触发器的创建。所以声明没有完成。

USE `secus_21`;
DELIMITER $$

DROP TRIGGER IF EXISTS tsm_tasks_BUPD;
CREATE TRIGGER `tsm_tasks_BUPD` BEFORE UPDATE ON tsm_tasks FOR EACH ROW
BEGIN
INSERT INTO `tsm_tasks_history`
    ( `ID_task` , `ID_user` , `ID_project` , `name` , `add_time` , `comment` )
VALUES
    ( OLD.`ID` , OLD.`ID_user` , OLD.`ID_project` , OLD.`name` , NOW() , OLD.`comment` );
END $$

DROP TRIGGER IF EXISTS tsm_tasks_BDEL;
CREATE TRIGGER `tsm_tasks_BDEL` BEFORE DELETE ON tsm_tasks FOR EACH ROW
BEGIN
INSERT INTO `tsm_tasks_history`
    ( `ID_task` , `ID_user` , `ID_project` , `name` , `add_time` , `comment` )
VALUES
    ( OLD.`ID` , OLD.`ID_user` , OLD.`ID_project` , OLD.`name` , NOW() , OLD.`comment` );
END $$

DELIMITER ;

关于mysql - 在更新MySQL触发器之前将旧记录插入到其他表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927724/

相关文章:

Oracle 通过过程插入或更新行

mysql - mysql 将多行插入单行

MYSQL:根据条件在一个字段或另一个字段上连接两个表

c# - 如何使用多线程管理连接和命令对象

php - 在 SUM 中调用或创建 session 变量

javascript - JS(jQuery): Randomly trigger-click 2 table rows

postgresql - 从 Postgres DB 中删除所有触发器?

php - 如果 user_id 在表中是唯一的,则插入记录,如果不是,则更新列

php - 从日期表中获取最接近可用时间范围的算法或 SQL

postgresql - 根据第三个表触发更新以删除另一个表中的行