mysql5.7-触发器TRIGGER--uuid和默认时间配置

一、# 表创建
CREATE TABLE `test2021`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
  `updateTime` timestamp(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),
  `updateTime2` timestamp(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;


二、默认UUID触发器

DELIMITER $$
CREATE

    TRIGGER code_trigger -- 触发器名称
    BEFORE INSERT             -- 触发器被触发的时机BEFORE/AFTER ,INSERT UPDATE DELETE 
    ON test2021       -- 触发器所作用的表名称
    FOR EACH ROW BEGIN
        SET new.code=REPLACE(UUID(),'-',''); -- 触发器执行的逻辑
    END$$

DELIMITER ;

--------------

默认时间触发器now和CURRENT_TIMESTAMP

(1)now()

DELIMITER $$
CREATE

    TRIGGER updateTime_trigger -- 触发器名称
    BEFORE INSERT             -- 触发器被触发的时机BEFORE/AFTER ,INSERT UPDATE DELETE
    ON test2021       -- 触发器所作用的表名称
    FOR EACH ROW BEGIN
        SET new.updateTime=now(); -- 触发器执行的逻辑
    END$$

DELIMITER ;

(2)CURRENT_TIMESTAMP()

CREATE

    TRIGGER updateTime2_trigger -- 触发器名称
    BEFORE INSERT             -- 触发器被触发的时机BEFORE/AFTER ,INSERT UPDATE DELETE
    ON test2021       -- 触发器所作用的表名称
    FOR EACH ROW BEGIN
        SET new.updateTime2=CURRENT_TIMESTAMP(); -- 触发器执行的逻辑
    END$$

DELIMITER ;

先讲一下after和before的区别:

after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新商品的数量;

before是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作;

三、插入数据

INSERT INTO test2021(`id`, `name`) VALUES (null, '109');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章