亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySql數據庫觸發器如何使用

發布時間:2022-05-31 13:42:47 來源:億速云 閱讀:265 作者:iii 欄目:開發技術

這篇文章主要講解了“MySql數據庫觸發器如何使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySql數據庫觸發器如何使用”吧!

    一、介紹

    1、觸發器是一種特殊的存儲過程。觸發器和存儲過程一樣,是一個能夠完成特定功能、存儲在數據庫服務器上的SQL片段,但是觸發器無語調用,當對數據庫表中的數據執行DML操作時自動觸發這個SQL片段的執行,無需手動調用。

    2、在MySql中,只有執行insert,delete,update操作時才能觸發觸發器的執行

    3、觸發器的這種特性可以協助應用在數據庫端確保數據的完整性,日志記錄,數據校驗等操作

    4、使用別名OLD和NEW來引用觸發器中發生變化的記錄內容,這與其他的數據庫是相似的,現在觸發器只支持行級觸發,不支持語句級觸發

    二、操作

    1、表數據準備

    # 用戶表
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for users
    -- ----------------------------
    DROP TABLE IF EXISTS `users`;
    CREATE TABLE `users`  (
      `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
      `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '用戶名',
      `sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '性別',
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    
    SET FOREIGN_KEY_CHECKS = 1;
    
    
    # 用戶操作日志表
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for user_log
    -- ----------------------------
    DROP TABLE IF EXISTS `user_log`;
    CREATE TABLE `user_log`  (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
      `create_time` datetime(0) DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    
    SET FOREIGN_KEY_CHECKS = 1;

    2、觸發器格式

    # 創建只有一個執行語句的觸發器
    
    create trigger 觸發器名 before|after 觸發事件
    on 表名 for each row
    執行語句;
    
    # 創建有多個執行語句的觸發器
    
    create trigger 觸發器名 before|after 觸發事件
    on 表名 for each row
    begin  
       執行語句列表
    end;

    3、操作

    drop TRIGGER if EXISTS TRIGGER_test;
    -- 需求1:當users表添加一行數據,則會自動在user_log添加日志記錄
    delimiter $$
    CREATE TRIGGER TRIGGER_test after INSERT
    on users FOR EACH ROW
    BEGIN
    INSERT INTO user_log(content,create_time) VALUES('添加了一條數據',NOW());
    end $$
    delimiter ;
    
    INSERT INTO users(user_name,sex) VALUES('xiaohemaio','男');
    
    
    -- 需求2:當users表修改一行數據,則會自動在user_log添加日志記錄
    drop TRIGGER if EXISTS TRIGGER_test1;
    
    delimiter $$
    CREATE TRIGGER TRIGGER_test1  BEFORE UPDATE
    on users FOR EACH ROW
    BEGIN
    INSERT INTO user_log(content,create_time) VALUES('修改了一條數據',NOW());
    end $$
    delimiter ;
    
    update users set user_name='迪麗熱巴' WHERE id=3;

    三、觸發器NEW和OLD的使用

    MySql中定義了NEW和OLD,用來表示觸發器的所在表中,觸發了觸發器的那一行數據,來引用觸發器中發生變化的記錄內容。

    MySql數據庫觸發器如何使用

    使用方法:NEW.columnName (columnName為相應數據表某一列名)

    1、案例

    -- 案例一
    drop TRIGGER if EXISTS TRIGGER_test2;
    
    delimiter $$
    CREATE TRIGGER TRIGGER_test2 after INSERT
    on users FOR EACH ROW
    BEGIN
    INSERT INTO user_log(content,create_time) VALUES(CONCAT('添加的用戶信息為:',NEW.user_name,' 性別為:',NEW.sex ),NOW());
    end $$
    delimiter ;
    
    INSERT INTO users(user_name,sex) VALUES('xiaohemaio','男');
    
    
    -- 案例二 
    drop TRIGGER if EXISTS TRIGGER_test3;
    
    delimiter $$
    CREATE TRIGGER TRIGGER_test3  BEFORE UPDATE
    on users FOR EACH ROW
    BEGIN
    INSERT INTO user_log(content,create_time) VALUES(CONCAT('將:',OLD.user_name,' 修改為:',NEW.user_name ),NOW());
    end $$
    delimiter ;
    
    update users set user_name='迪麗熱巴' WHERE id=4;
    
    -- 案例三
    drop TRIGGER if EXISTS TRIGGER_test4;
    
    delimiter $$
    CREATE TRIGGER TRIGGER_test4  BEFORE DELETE
    on users FOR EACH ROW
    BEGIN
    INSERT INTO user_log(content,create_time) VALUES(CONCAT('將id為:',OLD.user_name,' 已刪除' ),NOW());
    end $$
    delimiter ;
    
    DELETE FROM  users WHERE id=4;

    MySql數據庫觸發器如何使用

    四、其他操作

    -- 查看觸發器
    SHOW TRIGGERS;
    
    -- 刪除觸發器
    drop TRIGGER if EXISTS 觸發器名;

    五、注意事項

    1、觸發器中不能對本表進行insert,update,delete操作,以免遞歸循環觸發

    2、盡量少使用 觸發器,假設觸發器觸發每次執行1s,insert table 500條數據,那么就需要觸發500次觸發器,光是觸發器執行的時間就花費了500s,而insert 500條數據一共是1s,那么這個insert 的效率就非常低了。

    3、觸發器是針對每一行的數據,對增刪改非常頻繁的表上切記不要使用觸發器,因為非常消耗資源。

    補充:驗證觸發器

    向用戶表users插入數據。

    mysql> INSERT INTO users (userName, password, name, nickName, sex, email, isManager) VALUE ('itbilu', 'e10adc3949ba59abbe56e057f20f883e', 'IT筆錄', 'itbilu', 1, 'cn.liuht@gmail.com', 0);

    users原來沒有數據,剛插入的數據userId為1。向用戶表角色表userRoles插入數據,使觸發器觸發:

    mysql> INSERT INTO userRoles (userId, roleId) VALUE (1, 1);

    剛才插入的數據已經使觸發器觸發,查看結果如下:

    mysql> select isManager from users;
    +-----------+
    | isManager |
    +-----------+
    |         1 |
    +-----------+

    感謝各位的閱讀,以上就是“MySql數據庫觸發器如何使用”的內容了,經過本文的學習后,相信大家對MySql數據庫觸發器如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    安徽省| 富平县| 蚌埠市| 雷山县| 江安县| 郯城县| 高邮市| 北辰区| 临桂县| 玉屏| 新津县| 柏乡县| 阿瓦提县| 肥乡县| 巨野县| 永善县| 交城县| 微山县| 西林县| 百色市| 湖南省| 阳朔县| 鹤峰县| 通许县| 宁国市| 瑞金市| 新郑市| 涿州市| 澄城县| 田东县| 望江县| 古交市| 嘉黎县| 凤凰县| 怀仁县| 绥江县| 于都县| 吴旗县| 虹口区| 威远县| 潞城市|