触发器是自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也可beforefor 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列对应的值。
五、对触发器的进一步说明 触发器的执行是自动的应该多用触发器来保证数据的一致性,完整性和正确性。触发器不支持call语句,所以不能直接存储过程,只有手工地将所需的存储过程代码复制到触发器内。 总结以上是内存溢出为你收集整理的Mysql之触发器小结全部内容,希望文章能够帮你解决Mysql之触发器小结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)