当前位置: 首页 > article >正文

MySQL复习4

触发器

触发器(trigger)是 MySQL 提供给程序员和数据分析员来保证数据完整性的一种方法,他是与表时间相关的特殊存储过程,他的执行不是由程序调用,也不是手动启动,而是由事件来触发,比如当时对一个表进行 DML 操作(insertdeleteupdate)时就会激活他执行。

要素

  1. 监视对象:table
  2. 监视事件:insert,update,delete
  3. 触发时间:before,after
  4. 触发事件:insert,update,delete

语法

create trigger trigger_name trigger_time trigger_event on tbl_name for each row [trigger_order] trigger_body;
  • trigger_bogy:可以使一个语句,也可以是多个语句;多个语句写在 BEGIN ... END 之间;
  • trigger_time: {BEFOER | AFTER}
  • trigger_event: {INSERT | UPDATE | DELETE}
  • trigger_order: {FOLLOWS | PRECEDES}

准备

create table `work` (
    `id` int primary key auto_increment,
    `address` varchar(32)
)default charset = utf8 engine = innoDB;

create table `time` (
    `id` int primary key auto_increment,
    `time` datetime
)default charset = utf8 engine = innoDB;

create trigger trig_test1 after insert on `work` for each row insert into `time` values (null, now());

image.png

NEW 和 OLD

INSERT 类型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
DELETE 类型触发器中,OLD 用来表示将要或已经被删除的源数据;
UPDATE 类型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;

NEW.columnName
OLD.columnName

案例

在下订单的时候,对应的商品的库存量要相应减少,即买几个商品就减少多少个库存量。

准备

create table `goods` (
    `id` int primary key auto_increment,
    `name` varchar(32),
    `num` smallint default 0
);

create table `order` (
    `id` int primary key auto_increment,
    `goods_id` int,
    `quantity` smallint comment '下单数量'
);

insert into goods values (null, 'pig', 400);
insert into goods values (null, 'sheep', 500);
insert into goods values (null, 'bear', 600);

insert into `order` values (null, 1, 3);
insert into `order` values (null, 2, 4);
需求

客户修改订单数量,在原来购买数量的基础上减少 2 个;

delimiter //
create trigger trig_order_1 after insert on `order` for each row
begin
    update goods set num = num - 2 where id = 1;
end//
delimiter ;

http://www.kler.cn/a/290427.html

相关文章:

  • Apache ECharts
  • 解决MySQL中整型字段条件判断禁用不生效的问题
  • go do sth和come do sth的区别
  • LabVIEW编程基础教学(一)--介绍
  • 关于element-plus中el-table组件宽度一直连续不断增加的问题
  • 掌握核密度图:精准描绘不同年龄段的血糖分布
  • 构建灵活的搜索系统:Go 语言实践
  • AI驱动测试管理工具会有哪些发展前景呢?
  • 关于多线程unique_lock和guard_lock
  • 冒泡排序及qsort函数
  • P1505 [国家集训队] 旅游
  • 【C++深入学习】日期类函数从无到有实现
  • day-49 使数组中所有元素相等的最小操作数
  • glsl着色器学习(三)
  • 随时随地远程启动家里设备,极空间部署一键网络唤醒工具『UpSnap』
  • C++ 消息分发类:详细示例应用
  • Python 数据分析笔记— Numpy 基本操作(上)
  • zdppy_cache缓存框架升级,支持用户级别的缓存隔离,支持超级管理员管理普通用户的缓存
  • 【MySql】面试问答:在使用mysql时,遇到分页查询慢的情况怎么处理?
  • 观测云核心技术解密:eBPF Tracing 实现原理
  • Java项目:137 springboot基于springboot的智能家居系统
  • 1. 深度学习基础:从神经网络到深度学习
  • CSS系列之浮动清除clear(三)
  • ztree搜索结果高亮变颜色(非highlight属性)
  • upload文件上传靶场
  • 在react中用three.js 渲染模型 在上面创建标签