TRIGGER:Mysql触发器

php中文网
发布: 2016-06-07 15:55:58
原创
1516人浏览过

1. TRIGGER简介 trigger是mysql的触发器,当建立触发器时,会监控特定的事件,当触发时会激活对象,处理trigger_stmt,即要执行的语句。比如表的新增一条记录时,你需要更新记录的值得总和,则可以用trigger来实现。 2. Trigger创建语句 CREATE TRIGGER trig

1. TRIGGER简介

trigger是mysql的触发器,当建立触发器时,会监控特定的事件,当触发时会激活对象,处理trigger_stmt,即要执行的语句。比如表的新增一条记录时,你需要更新记录的值得总和,则可以用trigger来实现。

2. Trigger创建语句

CREATE TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt
登录后复制
trigger_name:为触发器名称
trigger_time: 触发器激活时间,为BEFORE或AFTER, 表明在表数据处理之前或之后
trigger_event: 触发激活的类型:下面三种
INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
tbl_name : 操作表名称
trigger_stmt: 触发器要操作的语句

3. 使用限制

1)同一个表不能有同一种触发器:
例如,对于某一表,不能有两个BEFORE UPDATE触发程序。但可以有1个BEFORE UPDATE触发程序和1个BEFORE INSERT触发程序,或1个BEFORE UPDATE触发程序和1个AFTER UPDATE触发程序。
2)必须是永久表,不能是TEMPORARY表或视图。

4. trigger使用

创建表和触发器
 CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));

 CREATE TRIGGER ins_sum BEFORE INSERT ON account
     FOR EACH ROW SET @sum = @sum + NEW.amount;
登录后复制
NEW关键词为操作后的新值。 OLD表示操作之前的值。插入三行记录,读取@sum的值
mysql> SET @sum = 0;
mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
mysql> SELECT @sum AS 'Total amount inserted';
登录后复制
返回值为 @sum的值是14.98 + 1937.50 – 100 = 1852.48。
对于触发程序是多行,使用BEGIN ... END结构
mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account
    -> FOR EACH ROW
    -> BEGIN
    ->     IF NEW.amount < 0 THEN
    ->         SET NEW.amount = 0;
    ->     ELSEIF NEW.amount > 100 THEN
    ->         SET NEW.amount = 100;
    ->     END IF;
    -> END;//
mysql> delimiter ;
登录后复制
更新一条记录,查看值:
update account set acct_num = 241 where acct_num=141;  
登录后复制
由于上面的update触发了trigger,会使 amount的值设置为100.

5. 查看已经建立的trigger

show triggers
登录后复制
还可以在information_schema数据库的 triggers表中查看。

6. 删除触发器

drop trigger test.ins_sum;
登录后复制
test为数据库名,ins_sum为触发器名称

7. 对失败的处理

· 如果before触发程序失败,不执行相应行上的操作。

· 仅当BEFORE触发程序(如果有的话)和行操作均已成功执行,才执行AFTER触发程序。
· 如果在BEFORE或AFTER触发程序的执行过程中出现错误,将导致调用触发程序的整个语句的失败。

· 对于事务性表,如果触发程序失败(以及由此导致的整个语句的失败),该语句所执行的所有更改将回滚。对于非事务性表,不能执行这类回滚,因而,即使语句失败,失败之前所作的任何更改依然有效。

地址:http://blog.csdn.net/yonggang7/article/details/24552817

MCP.so
MCP.so

发现优秀的MCP服务器和客户端

MCP.so 68
查看详情 MCP.so
相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号