• MYSQL中的触发器TRIGGER


    1.概念

    触发器是一个特殊的存储过程,当触发器保护的数据发生变更时就会触发。

    2.特性


    1.触发器与表息息相关,一般我们一个表创建六个触发器。

    2.六个触发器其实是三种类六个

    insert     类型 

      before | after    insert
    update   类型   before | after    update
    delete    类型   before | after    delete

       当我们进行这三个操作时,启动触发器。

    3.触发器写法

    1. CREATE TRIGGER trigger_name trigger_time trigger_event
    2.  ON table_name
    3.  FOR EACH ROW
    4.  BEGIN
    5.  ...
    6.  END

    4.创建触发器(实例,代码可操作)

    创建一个学生表和学生详情表

    1. -- 创建数据库
    2. CREATE DATABASE IF NOT EXISTS Test;
    3. -- 使用数据库
    4. USE Test;
    5. -- 创建表
    6. CREATE TABLE IF NOT EXISTS student (
    7. id INT PRIMARY KEY,
    8. name VARCHAR(255),
    9. age INT
    10. );
    11. -- info详细表
    12. CREATE TABLE stu_detail (
    13. id INT PRIMARY KEY,
    14. stu_id INT,
    15. name VARCHAR(50),
    16. age INT,
    17. address VARCHAR(100),
    18. phone VARCHAR(20)
    19. );
    20. -- 向student表中插入多条记录
    21. INSERT INTO student (id, name, age)
    22. VALUES (1, 'John', 25),
    23. (2, 'Jane', 28),
    24. (3, 'Mike', 30),
    25. (4, 'Sarah', 22);
    26. -- 向student表中插入多条记录
    27. INSERT INTO stu_detail (id, stu_id, name, age, address, phone)
    28. VALUES (1, 1, 'John', 25, '123 Main St', '123-456-7890');
    29. INSERT INTO stu_detail (id, stu_id, name, age, address, phone)
    30. VALUES (2, 2, 'Jane', 28, '456 Elm St', '987-654-3210');
    31. INSERT INTO stu_detail (id, stu_id, name, age, address, phone)
    32. VALUES (3, 3, 'Mike', 30, '789 Oak St', '555-123-4567');
    33. INSERT INTO stu_detail (id, stu_id, name, age, address, phone)
    34. VALUES (4, 4, 'Sarah', 22, '789 Oak St', '555-123-4567');

    创建BEFORE INSERT触发器

    该触发器作用为:插入student表时,先检查id是否存在,假如存在的话就回滚操作,并给出异常提醒,不存在才可以插入

    1. DELIMITER //
    2. CREATE TRIGGER before_insert_Student
    3. BEFORE INSERT ON student
    4. FOR EACH ROW
    5. BEGIN
    6. DECLARE idExists INT;
    7. SET idExists = (SELECT COUNT(*) FROM student WHERE id = NEW.id);
    8. IF idExists > 0 THEN
    9. SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '插入ID已经存在,不允许插入';
    10. END IF;
    11. END//
    12. DELIMITER ;

     测试触发器 

    id冲突

     id不冲突

     创建AFTER UPDATE触发器

    改触发器功能为:

     after update 触发器,当student数据update时,stu_detail表中对应id的记录也随之变更

    1. -- update 触发器
    2. CREATE TRIGGER after_update_student
    3. AFTER UPDATE ON student
    4. FOR EACH ROW
    5. BEGIN
    6. UPDATE stu_detail
    7. SET name = NEW.name, age = NEW.age
    8. WHERE id = NEW.id;
    9. END;

    测试触发器

    更改成功

     

    查看detail表是否自动变更(可发现成功更改)

     创建 AFTER DELETE触发器

    1. CREATE TRIGGER after_delete_student
    2. AFTER DELETE ON student
    3. FOR EACH ROW
    4. BEGIN
    5. DELETE FROM stu_detail WHERE id = OLD.id;
    6. END;

    最后一个我就不测试了,交给大家去检测一下。

    5.名词解释 

    BEFORE : 代表的意识是在我们的操作(insert,update,delete) 之前就执行触发器

    AFTER : 代表的意识是在我们的操作(insert,update,delete)    之后才执行触发器

    NEW: 对于insert来说,是将要或者已经新增的数据条

                 对于update来说,是将要或者已经修改的数据条

                 delete则没有NEW

    OLD:     对于delete来说,是将要或者已经删除的数据条

                 对于update来说,是修改前的数据条

                 insert则没有OLD

    NEW和OLD需要大家想一想就知道是啥意思了。

     

  • 相关阅读:
    TensorRT基础笔记
    Python内置函数系统学习(1)——数据转换与计算 (详细语法参考+参数说明+应用场景示例) 对象--->>字符串、字符--->>ASACII码 综合应用
    高压放大器有哪些实际应用场景
    文件io函数
    TI C6000 TMS320C6678 DSP+ Zynq-7045的PS + PL异构多核案例开发手册(4)
    客服必看:售后话术
    vconsole本地调试工具
    超级工厂里的生意图鉴
    Hadoop3 - MapReduce 属性优化
    基于快速行进平方法的水面无人船路径规划
  • 原文地址:https://blog.csdn.net/qq_42807952/article/details/134443784