mysql的触发器
来源:互联网 发布:骁龙410玩王者荣耀优化 编辑:程序博客网 时间:2024/06/15 21:58
关于触发器的介绍:
http://dev.mysql.com/doc/refman/5.1/zh/triggers.html
基本的介绍都可以在这里找到,对于基本的概念在这里不做赘述,针对一些重点来说。
trigger_event与以表操作方式激活触发程序的SQL语句并不很类似,这点很重要。例如,关于INSERT的BEFORE触发程序不仅能被INSERT语句激活,也能被LOAD DATA语句激活。
可能会造成混淆的例子之一是INSERT INTO .. ON DUPLICATE UPDATE ...语法:BEFORE INSERT触发程序对于每一行将激活,后跟AFTER INSERT触发程序,或BEFORE UPDATE和AFTER UPDATE触发程序,具体情况取决于行上是否有重复键。
使用别名OLD和NEW,能够引用与触发程序相关的表中的列。OLD.col_name在更新或删除它之前,引用已有行中的1列。NEW.col_name在更新它之后引用将要插入的新行的1列或已有行的1列。
此外,激活触发程序时,对触发程序执行的语句也存在一些限制:
· 触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL(允许存储程序通过参数将数据返回触发程序)。
· 触发程序不能使用以显式或隐式方式开始或结束事务的语句,如START TRANSACTION、COMMIT或ROLLBACK。
使用OLD和NEW关键字,能够访问受触发程序影响的行中的列(OLD和NEW不区分大小写)。在INSERT触发程序中,仅能使用NEW.col_name,没有旧行。在DELETE触发程序中,仅能使用OLD.col_name,没有新行。在UPDATE触发程序中,可以使用OLD.col_name来引用更新前的某一行的列,也能使用NEW.col_name来引用更新后的行中的列。
用OLD命名的列是只读的。你可以引用它,但不能更改它。对于用NEW命名的列,如果具有SELECT权限,可引用它。在BEFORE触发程序中,如果你具有UPDATE权限,可使用“SET NEW.col_name = value”更改它的值。这意味着,你可以使用触发程序来更改将要插入到新行中的值,或用于更新行的值。
如下是一个监控插入、删除以及更新表的触发器,所有更新的数据都将移入新表。
DELIMITER |#创建插入触发器CREATE TRIGGER INSERT_TRIGGER BEFORE INSERT ON tmp_testFOR EACH ROW BEGIN INSERT INTO tmp_tmp SELECT * FROM tmp_test WHERE id = NEW.id;END|#创建更新触发器,仅当target_url和user_cate更新时在临时表中插入数据CREATE TRIGGER UPDATE_TRIGGER AFTER UPDATE ON tmp_testFOR EACH ROWBEGINIF NEW.target_url != OLD.target_urlTHEN INSERT INTO tmp_tmp SELECT * FROM tmp_test WHERE id = NEW.id ON DUPLICATE KEY UPDATE target_url = NEW.target_url;END IF;IF NEW.user_cate != OLD.user_cateTHEN INSERT INTO tmp_tmp SELECT * FROM tmp_test WHERE id = NEW.id ON DUPLICATE KEY UPDATE user_cate = NEW.user_cate;END IF;END|#创建删除触发器CREATE TRIGGER DELETE_TRIGGER BEFORE DELETE ON tmp_testFOR EACH ROW BEGIN INSERT INTO tmp_tmp SELECT * FROM tmp_test WHERE id = OLD.id; UPDATE tmp_tmp SET enabled = 0 WHERE id = OLD.id;END|DELIMITER ;
- MySQL触发器的使用
- MySQL触发器的使用
- MySQL触发器的使用
- MySQL 触发器的用法
- Mysql 触发器的使用
- MySQL触发器的使用
- MySQL的触发器
- Mysql 触发器的作用
- mysql 触发器的使用
- MySQL - 触发器的应用
- mysql的触发器详解
- mysql的触发器
- Mysql 的触发器详解
- mysql下的触发器
- mysql 触发器的使用
- MySQL触发器的语法
- mysql的触发器
- mysql触发器的使用
- vector<int>::iterator mid=(vi.begin()+vi.end())/2
- 章文嵩:服务器定制与绿色计算
- C++中赋值运算符默认的返回值类型
- linux-Tcp IP协议栈源码阅读笔记
- xml解析
- mysql的触发器
- Source Insight 打不开问题
- Rails Rake 指南
- 在打开rc文件夹时出现“在另一个编辑器中打开”
- jQuery选择器大全(48个代码片段+21幅图演示)
- Linux 下 OpenCV2.0 的编译与安装 (ARM9)与(x86)
- vs2008 当前上下文不存在名称xxx 解决办法
- php-fpm
- 凌乱的乐趣与悲哀