美文网首页
mysql触发器0531

mysql触发器0531

作者: xiaoqiaobian | 来源:发表于2020-05-31 20:45 被阅读0次

    触发器概念:
    1.触发器是与表有关的数据库对象
    2.它可以在 insert、update、delete 之前或之后触发并执行触发器中定义的 SQL 语句
    3.触发器的这种特性可以协助应用系统在数据库端确保数据的完整性、日志记录、数据校验等操作
    4.使用别名 NEW 和 OLD 来引用触发器中发生变化的内容记录

    触发器分类:


    image.png image.png

    定义student数据表的增删改的触发器

    一、准备数据
    -- 1.1创建学生表
    CREATE TABLE student(
    id INT PRIMARY KEY AUTO_INCREMENT, -- 学生id
    NAME VARCHAR(20), -- 学生姓名
    age INT, -- 学生年龄
    gender VARCHAR(5), -- 学生性别
    score INT -- 学生成绩
    );
    -- 1.1.1添加数据
    INSERT INTO student VALUES (NULL,'张三',23,'男',95),(NULL,'李四',24,'男',98),
    (NULL,'王五',25,'女',100),(NULL,'赵六',26,'女',90);

    -- 1.2创建日志表student_log
    CREATE TABLE student_log(
    id INT PRIMARY KEY AUTO_INCREMENT, -- 日志id
    operation VARCHAR(20), -- 操作类型 (insert update delete)
    operation_time DATETIME, -- 操作时间
    operation_id INT, -- 操作表的id
    operation_params VARCHAR(200) -- 操作参数
    );

    image.png

    1.2.1添加触发器,关联学生日志表格

    -- 1.2.1.1增加触发器
    DELIMITER $
    CREATE TRIGGER student_insert
    AFTER INSERT ON student FOR EACH ROW
    BEGIN
        INSERT INTO student_log VALUES 
        (NULL,'INSERT',NOW(),new.id,CONCAT(
        "插入后{id=',new.id,',name=',new.name,',age=',new.age,',gender=',new.gender,',score=',new.score,'}"));
    END$
    DELIMITER ;
    
    -- 1.2.1.2删除触发器
    DELIMITER $
    CREATE TRIGGER student_delete
    AFTER DELETE
    ON student
    FOR EACH ROW
    BEGIN
        INSERT INTO student_log VALUES 
        (NULL,'delete',NOW(),old.id,CONCAT(
        '删除前{id=',old.id,',name=',old.name,',age=',old.age,',gender=',old.gender,',score=',old.score,'}'));
    END$
    DELIMITER ;
    
    -- 1.2.1.3修改触发器
    DELIMITER $
    CREATE TRIGGER student_update
    AFTER UPDATE
    ON student
    FOR EACH ROW
    BEGIN
             INSERT INTO student_log VALUES
             (NULL,'update',NOW(),new.id,CONCAT(
             '修改前{id=',old.id,',name=',old.name,',age=',old.age,',gender=',old.gender,',score=',old.score,'}',
             '修改后{id=',new.id,',name=',new.name,',age=',new.age,',gender=',new.gender,',score=',new.score,'}'));                 
    END $
    DELIMITER ;
    

    二、增删改,测试触发器性能

    -- 新增2条学生信息
    SELECT * FROM student;
    INSERT INTO student VALUES (NULL,"张峰",28,"男",59);
    INSERT INTO student VALUES (NULL,"马东",18,"女",99);
    SELECT * FROM student_log;
    
    -- 删除id为2的学生信息
    DELETE FROM student WHERE id=2;
    SELECT * FROM student_log;
    
    -- 修改id为6的学生信息
    UPDATE student SET NAME="夏远",age=34,gender="男" WHERE id =6;
    SELECT * FROM student_log;
    
    image.png
    image.png

    相关文章

      网友评论

          本文标题:mysql触发器0531

          本文链接:https://www.haomeiwen.com/subject/pgirzhtx.html