一、# 表创建
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');