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