Mysql之触发器小结

一、概念

触发器是自Mysql5.0开始支持的一种过程式数据库对象。
具体而言,触发器就是Mysql响应insert、update、delete语句而自动执行的一条Mysql语句(或位于begin和end语句之间的一组Mysql语句)。
需要注意的是触发器只对增、删、改语句响应,其他Mysql语句是不支持触发器的。

二、创建触发器

在数据库mysql_test的表customers中创建一个触发器customers_insert_trigger,用于每次向表customers中插入一行数据时,将用户变量str的值设置为”one customer added!”。

create trigger mysql_test.customers_insert_trigger 
after insert on mysql_test.customers --触发时间可以after也可before
for each row set @str='one customers added!';--for each row的意思是每一行执行都激活触发器

创建完毕后,可以插入一条数据测试一下

insert mysql_test.customers values(null,'万华','F','长沙市','芙蓉区');

最后,在命令行输入下面sql语句验证触发器

select @str;

三、删除触发器

drop trigger if exists mysql_test.customers_insert_trigger;

注意:当删除一个表的同时,也会自动地删除该表上的触发器。另外,触发器不能更新或覆盖,如果要修改触发器,必须先删除它,再重新创建。

四、使用触发器

1.insert触发器

在insert触发器代码内,可引用一个名为new(不区分大小写)的虚拟表,来访问新插入的行,即使是before insert触发器也允许更改被插入的值(只要有相应的权限)。
如插入一条数据时,将用户变量str的值设置为新插入客户的cust_id号:

create trigger mysql_test.customers_insert_trigger after insert on mysql_test.customers for each row set @str=new.cust_id;

2.delete触发器

在delete触发器代码内,可以引用一个名为old(不区分大小写)的虚拟表,来访问被删除的行。

3.update触发器

在update触发器的代码内,可以引用new虚拟表,也可以引用old虚拟表,其中要注意的是old中的值全部是只读的,不能被更新。
如每次更新表customers时,将该表中cust_address列的值设置为原数据中cust_contact列的值。

create trigger mysql_test.customers_update_trigger before update on mysql_test.customers for each row set new cust_address=old.cust_contact;

更新一条数据 ,测试一下

update mysql_test.customers set cust_address='武汉市' where cust_name='张三';

最后,在命令行输入以下sql语句,会发现“张三”的cust_address的值并非“武汉市”,而是被触发器更新为原表中cust_contact列对应的值。

五、对触发器的进一步说明

  1. 触发器的执行是自动的
  2. 应该多用触发器来保证数据的一致性,完整性和正确性。
  3. 触发器不支持call语句,所以不能直接存储过程,只有手工地将所需的存储过程代码复制到触发器内。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值