一、实验目的
    1、理解触发器及事件的相关概念、功能和工作原理;
    2、掌握创建、更改、删除触发器的方法;
    3、掌握利用触发器维护数据完整性的方法
    4、掌握事件的相关操作;
    5、理解old和new的含义;

    二、实验环境
    装有软件MySQL5.7或更高版本的PC电脑一台;

    三、实验步骤及实验要求
    按照下面的实验内容要求完成作业,将作业结果的每一步截图粘贴到word文档中即可。每一个实验都必须编写实验报告,要求如下:
    1、实验报告用word编写;
    2、word文件命名的格式统一要求:为以“杨健”同学19号为例,他所做的第4次实验的实验报告应该命令为:“DB实验4— 19号—杨健”(即格式是:实验序号—课内序号—姓名);课内序号现在是一个人一门课一个号,同一个人在不同课序号会不同,回头我会将课程名单发到群里,自己查阅你自己在本门课中的序号。
    3、实验报告用统一的封面,封面模板到时发给大家;
    4、报告中截取每题主要步骤结果的截图、实验结果截图
    5、实验报告最后要加上实验总结,总结部分必须写出自己的切身体会
    6、实验报告如有雷同、抄袭现象,后果自负;
    7、实验报告上交截止时间:上机后一周之内
    8、实验上交方式:由学委收集齐全后,统一交付老师:

    四、实验内容
    1、将课堂所讲解的关于触发器的演示代码运行并理解一遍;

    1. #创建触发器语法
    2. CREATE TRIGGER 触发器名称
    3. {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名
    4. FOR EACH ROW
    5. 触发器执行的语句块;
    6. #查看触发器
    7. #方式1:查看当前数据库的所有触发器的定义
    8. SHOW TRIGGERS\G
    9. #方式2:查看当前数据库中某个触发器的定义
    10. SHOW CREATE TRIGGER 触发器名
    11. #方式3:从系统库information_schema的TRIGGERS表中查询“salary_check_trigger”触发器的信息。
    12. SELECT * FROM information_schema.TRIGGERS;
    13. #删除触发器
    14. DROP TRIGGER IF EXISTS 触发器名称;

    2、将课堂所讲解的关于事件的演示代码运行并理解一遍;
    3、某同学定义产品信息product表,主要信息有:产品编号、产品名称、主要功能、生产厂商、c厂商地址,生成product表的SQL代码如下:

    1. CREATE TABLE product (
    2. id INT(10) NOT NULL UNIQUE PRIMARY KEY ,
    3. name VARCHAR(20) NOT NULL ,
    4. function VARCHAR(50) ,
    5. company VARCHAR(20) NOT NULL,
    6. address VARCHAR(50)
    7. );

    在对product表进行数据操作时,需要对操作的内容和时间进行记录。于是定义了operate表,其表生成SQL语句为:

    1. CREATE TABLE operate (
    2. op_id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT ,
    3. op_name VARCHAR(20) NOT NULL ,
    4. op_tiem TIME NOT NULL
    5. );

    请完成如下任务:
    1)在product表上分别创建BEFORE INSERT、AFTER UPDATE和AFTER DELETE这样的3个触发器,触发器的名称分别为Tproduct_bf_insert、Tproduct_af_update和Tproduct_af_del。执行语句部分都是向operate表插入操作方法和操作时间。

    1. DELIMITER //
    2. CREATE TRIGGER Tproduct_bf_insert
    3. BEFORE INSERT ON product
    4. FOR EACH ROW
    5. BEGIN
    6. INSERT INTO operate
    7. VALUE(null,'Tproduct_bf_insert',NOW());
    8. END //
    9. DELIMITER ;
    10. DELIMITER //
    11. CREATE TRIGGER Tproduct_af_update
    12. AFTER INSERT ON product
    13. FOR EACH ROW
    14. BEGIN
    15. INSERT INTO operate
    16. VALUE(null,'Tproduct_af_update',NOW());
    17. END //
    18. DELIMITER ;
    19. DELIMITER //
    20. CREATE TRIGGER Tproduct_af_del
    21. AFTER DELETE ON product
    22. FOR EACH ROW
    23. BEGIN
    24. INSERT INTO operate
    25. VALUE(null,'Tproduct_af_del',NOW());
    26. END //
    27. DELIMITER

    image.png
    image.png
    image.png
    2)对product表分别执行INSERT、UPDATE和DELETE操作,分别查看operate表。
    (1)对product表中插入一条记录:1, ‘abc’,’治疗感冒’, ‘北京abc制药厂’,’北京市昌平区’;

    1. INSERT INTO product VALUE(1, 'abc','治疗感冒', '北京abc制药厂','北京市昌平区');

    image.png
    (2)更新记录,将产品编号为1的厂商住址:改为“北京市海淀区”;

    1. UPDATE product
    2. SET address = '北京市海淀区'
    3. WHERE id = 1;
    4. SELECT * FROM product;
    5. SELECT * FROM operate;

    image.png
    (3)删除产品编号为1的记录。

    1. DELETE FROM product
    2. WHERE id = 1;
    3. SELECT * FROM product;
    4. SELECT * FROM operate;

    image.png
    3)删除Tproduct_bf_update触发器;

    1. DROP TRIGGER IF EXISTS Tproduct_af_update;

    image.png