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');

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