当前位置:   article > 正文

MySQL——触发器(笔记8)_sql8.0触发器的使用及语法

sql8.0触发器的使用及语法

一、介绍


1.概念:
触发器是指在表insert/update/delete之前或者之后,触发并执行触发器中定义的SQL语句结合。

2.作用
可以协助应用在数据库端保证数据的完整性,日志记录,数据校验等操作。

3.触发器中的变量
–new:代表即将要新增的数据,或者即将要更新的数据,或添加之后的数据。
–old:表示修改之前的旧数据,或者将要删除的数据。

4.触发器的类型
–insert型触发器
–update型触发器
–delete型触发器

二、创建触发器

语法结构:
 create trigger trigger_name #trigger即触发器 trigger_name触发器名称
before/after insert/upate/delte #表示在增加,更新,删除操作之前或者之后执行该触发器
on 表名
[for each row] #表示行级触发器
begin
触发器要操作语句
end;

三、查看触发器


语法:
show triggers;

四、删除触发器


语法:
drop trigger 触发器名称;

  1. /*
  2. 案例1:
  3. 一张水果仓库表,一张订单表。当生成一张订单时,假如订单某水果数量为10,那么水果仓库表对应的水果数量-10
  4. */
  5. #创建水果表,并插入值
  6. CREATE TABLE `fruit` (
  7. `id` int(255) NOT NULL AUTO_INCREMENT,
  8. `f_name` varchar(255) DEFAULT NULL,
  9. `f_count` int(255) DEFAULT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
  12. #创建订单表,并插入值
  13. CREATE TABLE `orders` (
  14. `id` int(11) NOT NULL AUTO_INCREMENT,
  15. `name` varchar(255) DEFAULT NULL,
  16. `count` int(11) DEFAULT NULL,
  17. PRIMARY KEY (`id`)
  18. ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
  19. #创建订单触发器
  20. #表示一旦我插入一条订单记录,水果表中的水果数量减少
  21. create trigger order_trigger
  22. after insert
  23. on orders
  24. for each row
  25. begin
  26. #触发器执行的操作
  27. update fruit
  28. set f_count=f_count-new.count
  29. #水果库存数量-订单要购买的数量 new.count表示orders表中中插入的数量
  30. where f_name=new.name; #new.name 表示orders表中要购买的水果
  31. end;
  32. #查看触发器
  33. show triggers;
  34. #下单10个香蕉
  35. insert into orders values (null,"香蕉",10);
  36. /*
  37. 执行该语句时,同时执行了
  38. update fruit
  39. set f_count=f_count-10
  40. where f_name="香蕉";
  41. */
  42. /*
  43. 案例2:
  44. 去修改水果的库存时。要记录增加了哪个水果的数量,并且水果增加前的数量,增加了多少,增加后的数量。
  45. */
  46. #创建日志记录表
  47. CREATE TABLE `fruit_log` (
  48. `id` int(11) NOT NULL AUTO_INCREMENT,
  49. `operate_fruit` varchar(255) DEFAULT NULL,
  50. `old_count` int(255) DEFAULT NULL,
  51. `add_count` int(255) DEFAULT NULL,
  52. `new_count` int(255) DEFAULT NULL,
  53. `operate_time` datetime DEFAULT NULL,
  54. PRIMARY KEY (`id`)
  55. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
  56. #创建更新触发器
  57. #表示一旦去更新了水果的数量,就将向日志表中插入一条水果的更新记录
  58. create trigger fruit_update
  59. after update
  60. on fruit
  61. for each row
  62. begin
  63. insert into fruit_log values
  64. (null,new.f_name,old.f_count,
  65. (new.f_count-old.f_count),
  66. new.f_count,
  67. now());
  68. end;
  69. #此时,每当去更新水果数量,日志表中对应插入该水果的数量变化值

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/757434
推荐阅读
相关标签
  

闽ICP备14008679号