douzhuiqiu4923 2016-09-13 03:59
浏览 174
已采纳

创建一个mysql触发器,以在列更新时插入数据

CREATE TRIGGER `update_2` 
AFTER UPDATE ON `itm_master`
FOR EACH ROW 
BEGIN
    IF NEW.transfer_status='YES' THEN
        INSERT into activity_tbl (`evnt_date`,`con_type`,`username`,`item_serial`,`item_model`,`item_type`,`to_status`)
        VALUES (now(),'Update',NEW.user,NEW.item_serial,NEW.master_item_model,NEW.master_item_type,NEW.item_status);
    END IF;
END

I'd like to create a trigger to insert data into activity_tbl whenever the transfer_status field updated in item_master table. I use this query but i am receiving Mysql Error

CREATE TRIGGER `update_2` 
AFTER UPDATE ON `itm_master`
FOR EACH ROW 
BEGIN
    IF NEW.transfer_status='YES' THEN
        INSERT into activity_tbl (`evnt_date`,`con_type`,`username`,`item_serial`,`item_model`,`item_type`,`to_status`)
        VALUES (now(),'Update',NEW.user,NEW.item_serial,NEW.master_item_model,NEW.master_item_type,NEW.item_status);

MySQL said: Documentation

1064 - Erreur de syntaxe près de '' à la ligne 7

  • 写回答

1条回答 默认 最新

  • duanjianxu4288 2016-09-13 04:16
    关注

    I got this to work. I am out of creative commentary at the moment.

    SCHEMA:

    create table itm_master
    (   id int auto_increment primary key,
        transfer_status VARCHAR(100) NOT NULL,
        user VARCHAR(100) NOT NULL,
        item_serial VARCHAR(100) NOT NULL,
        master_item_model VARCHAR(100) NOT NULL,
        master_item_type VARCHAR(100) NOT NULL,
        item_status VARCHAR(100) NOT NULL
    );
    create table activity_tbl
    (   id int auto_increment primary key,
        `evnt_date` DATETIME NOT NULL,
        `con_type` VARCHAR(100) NOT NULL,
        `username` VARCHAR(100) NOT NULL,
        `item_serial` VARCHAR(100) NOT NULL,
        `item_model` VARCHAR(100) NOT NULL,
        `item_type` VARCHAR(100) NOT NULL,
        `to_status` VARCHAR(100) NOT NULL
    );
    

    TRIGGER:

    DROP TRIGGER IF EXISTS update_2;
    DELIMITER $$
    CREATE TRIGGER `update_2` 
    AFTER UPDATE ON `itm_master`
    FOR EACH ROW 
    BEGIN
        IF NEW.transfer_status='YES' THEN
            INSERT into activity_tbl (`evnt_date`,`con_type`,`username`,`item_serial`,`item_model`,`item_type`,`to_status`)
            VALUES (now(),'Update',NEW.user,NEW.item_serial,NEW.master_item_model,NEW.master_item_type,NEW.item_status);
        END IF;
    END;$$
    DELIMITER ;
    

    Test:

    INSERT itm_master(transfer_status, user, item_serial, master_item_model, master_item_type, item_status) values
    ('a','b','c','d','e','f');
    
    UPDATE itm_master SET transfer_status='blah' WHERE id=1;
    select * from activity_tbl;
    -- no rows
    
    UPDATE itm_master SET transfer_status='YES' WHERE id=1;
    select * from activity_tbl;
    +----+---------------------+----------+----------+-------------+------------+-----------+-----------+
    | id | evnt_date           | con_type | username | item_serial | item_model | item_type | to_status |
    +----+---------------------+----------+----------+-------------+------------+-----------+-----------+
    |  1 | 2016-09-13 00:14:26 | Update   | b        | c           | d          | e         | f         |
    +----+---------------------+----------+----------+-------------+------------+-----------+-----------+
    

    The DELIMITER wrapper is not needed for PHPMyAdmin.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?