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 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值