美文网首页
MySql触发器new的默认值

MySql触发器new的默认值

作者: 杂学小生 | 来源:发表于2017-12-07 15:12 被阅读15次
    DROP TABLE `dasi_util`.`student`
    CREATE TABLE `dasi_util`.`student`(
     `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
     `stu_id` VARCHAR(32) COMMENT '学生id',
     `stu_name` VARCHAR(32) COMMENT '学生姓名',
     `f1` VARCHAR(32) COMMENT '结果1',
     `f2` VARCHAR(32) COMMENT '结果2',
     PRIMARY KEY (`id`)
    );
    
    DELIMITER $$ 
    DROP TRIGGER IF EXISTS `dasi_util`.`update_student`$$ 
    CREATE TRIGGER `dasi_util`.`update_student` 
    BEFORE UPDATE ON `dasi_util`.`student`
    FOR EACH ROW 
    BEGIN
       SET new.`f1` = new.`stu_id`;
       SET new.`f2` = old.`stu_id`;
    END $$ 
    DELIMITER ; 
    

    插入数据

    INSERT `student`(f1,f2) VALUES(0,0);
    INSERT `student`(stu_id,f1,f2) VALUES(10,0,0);
    INSERT `student`(f1,f2) VALUES(0,0);
    INSERT `student`(stu_id,f1,f2) VALUES(10,0,0);
    SELECT * FROM student;
    
    id stu_id stu_name f1 f2
    1 (NULL) (NULL) 0 0
    2 10 (NULL) 0 0
    3 (NULL) (NULL) 0 0
    4 10 (NULL) 0 0

    修改数据

    UPDATE `student` SET `stu_id`='1' WHERE id=1;
    UPDATE `student` SET `stu_id`='1' WHERE id=2;
    UPDATE `student` SET `stu_name`='1' WHERE id=3;
    UPDATE `student` SET `stu_name`='1' WHERE id=4;
    SELECT * FROM student;
    
    id stu_id stu_name f1 f2
    1 1 (NULL) 1 (NULL)
    2 1 (NULL) 1 10
    3 (NULL) 1 (NULL) (NULL)
    4 10 1 10 10

    通过这1、2两条数据推论出:
    修改了stu_id,new.stu_id的值就是stu_id修改后的值;old.stu_id的值是原有的值(NULL也不例外)

    通过这3、4两条数据推论出:
    修改了stu_name,new.stu_id的值就是old.stu_id的值;old.stu_id的值是原有的值(NULL也不例外)

    小结

    new的值在没有修改的时候是和old的值一样的(含NULL),但当修改了之后,new的值就是新的值

    相关文章

      网友评论

          本文标题:MySql触发器new的默认值

          本文链接:https://www.haomeiwen.com/subject/cszrixtx.html