MySQL学习笔记(四)

目录

 

一、补充知识:

二、触发器:顾名思义,触发器就是在对表进行插入,更新,删除操作时会触发的操作


一、补充知识:

1.1 AUTO_INCREMENT关键字(在尾部添加,放在主键后面):设置变量为自增变量

        CREATE TABLE   test
        (
             id int PRIMARY KEY AUTO_INCREMENT
        )AUTO_INCREMENT = 100;

1.2 一般情况下,MySQL的默认是以; 作为结束执行语句,与触发器中需要的分行起冲突

 解决办法:DELIMITER ||,可以将结束符号变成||

当触发器创建后,可用DELIMITER ; 进行还原

 

1.3 FOREIGN_KEY_CHECKS变量:用来控制外键约束,可设置为0取消外键约束,设置为1还原外键约束

create trigger updateBookName before update on book for each row
begin
SET FOREIGN_KEY_CHECKS = 0;
if(old.图书编号!=new.图书编号) then
	update onsale set 图书编号=new.图书编号 where 图书编号=old.图书编号;
end if;
SET FOREIGN_KEY_CHECKS = 1;
end;$$
delimiter ;

二、触发器:顾名思义,触发器就是在对表进行插入,更新,删除操作时会触发的操作

2.1创建触发器

格式:在每个行的表名触发的操作之前/之后创建触发器名

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
    执行语句列表
END

触发时间有俩种

before:在操作前触发

after:在操作后触发

触发事件有三种:

insert:insert触发进行操作,load data和replace也同样会触发操作。

update:update触发进行操作。

delete:删除触发进行操作,replace也会触发操作。

注意:对于一张表来说不能有俩个触发操作同样的触发器,只能各自有一个。

2.2删除触发器

     drop trigger  器名

2.3触发器的俩个对象:old对象和new对象。

可用old和new对新纪录或旧纪录进行操作,比对。

insert触发器:会将待插入的记录写入new对象里,可在触发器里使用" new.列名 "调用数据

delete触发器:会将待删除的记录写入old对象里,可在触发器里使用" old.列名 "调用数据

update触发器:会将已存在旧记录写入old对象,马上更新记录写入new对象。

 

实验用的雇员数据表,数项设置为AUTO_INCREMENT自增属性,插入时自动增加。

//增加数列列的语句:alter table employee add column number int(1)primary key auto_increment;

可以知道当前人数有7位,假定我们设定只能存入七位职员数据,通过一个触发器inspeck判断插入前人数(数目)是否超过人数限制7位

delimiter || 

create trigger t1 before insert

for each row

begin

declare x int;

select count(id) into x from employee;

if(x > = 7)then

insert into bucunzai values(0); //目前的MySQL的没有抛出异常方法,设置一个语句
                                //插入不存在的表数据抛出异常

end if;
end;

delimiter ; 

此时已知表中有六位职员,只能添加最后一位,达到触发器限制,会在添加前(之前)限制添加。

触发器可以使用的场景有很多,且具有一定逻辑性,例如:一张货物表,一张订单表,当添加一个新订单时需要检查货物数量是否达到订单要求,可以使用触发器在订单插入前检查另一表中数量。

最后,删除触发器,毕竟一张表同一类型的触发器只能有一个。

记得要将结束符改回来:DELIMITER;

相关章节:

(一)https://blog.csdn.net/qq_38487155/article/details/79475851

(二)https://blog.csdn.net/qq_38487155/article/details/79488478

(三)https://blog.csdn.net/qq_38487155/article/details/79508140

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值