mysql触发器实例学习

原文链接mysql触发器实例学习

mysql触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。

一、语法

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name
FOR EACH ROW
BEGIN
trigger_stmt
END;

1、 trigger_name:触发器的表名,即在哪张表上建立触发器;

2、trigger_time是触发程序的动作时间。它可以是BEFORE或AFTER trigger_event指明了激活触发程序的语句的类型。

3、trigger_event可以是下述值之一:

· INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
· UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
· DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。

4、tbl_name :表名;

5、trigger_stmt:触发器程序体。

二、实例

1、创建表

CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL auto_increment,
`price` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

2、创建触发器(通过一个变量来测试,不需要重建一张表)

1、插入触发器test_insert_trigger

delimiter |
create trigger test_insert_trigger before insert on test for each row
begin set @y = "test_insert_trigger";
set NEW.price = 88.88;
end;
|

2、更新触发器test_update_trigger

delimiter |
create trigger test_update_trigger before update on test for each row
begin set @y = "test_update_trigger";
set NEW.price = 77.77;
end;
|

3、删除触发器test_delete_trigger

delimiter |
create trigger test_delete_trigger before delete on test for each row
begin set @y = "test_delete_trigger";
end;
|

4、查看结果

select @y,test.* from test;

5、删除触发器

格式:  DROP TRIGGER [schema_name.]trigger_name;

DROP TRIGGER test_insert_trigger;
DROP TRIGGER test_update_trigger; 
DROP TRIGGER test_delete_trigger;

三、查看库中的触发器

1、SHOW TRIGGERS; 查看所有触发器;
2、SHOW TRIGGERS from db like “xxxx%”; 查看数据库db上名称和xxxxs%匹配的触发器;
3、MySQL中有一个information_schema数据库,其中的TRIGGERS表,存储所有库中的所有触发器,可以从该表中查询trigger。

四、需要注意的地方

1、触发器程序可以使用begin和end作为开始和结束,中间包含多条语句。

2、触发器可使用OLD关键字和NEW关键字。OLD和NEW可以引用触发器所在表的某一列,OLD表示修改前行的原有内容,NEW表示修改后行的内容。OLD的列是只读的,而NEW列则可以在触发器再次赋值。

3、不能同时在一个表上建立2个相同类型的触发器,因此,在一个表上最多建立6个触发器,即 before insert型;before update型;before delete型;after insert型;after update型;after delete型。

4、触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL(允许存储程序通过参数将数据返回触发程序)。

5、而存储过程可以接受参数,将结果范围给应用程序。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值