概述
使用触发器/管理事务处理
- 使用触发器
- 触发器
- 创建触发器
- 删除触发器
- 使用触发器
- insert触发器
- delete触发器
- update触发器
- 管理事务处理
- 事务处理核心
- 控制事务处理
- 标识事务处理开始
- Rollback
- Commit
- 使用保留点
使用触发器
触发器类似信号
触发器
触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或者位于begin和end之间的一组语句);
- delete
- insert
- update
创建触发器
Create Trigger newproduct//触发器姓名
After Insert On products//触发器关联的表和何时执行
For each Row Select 'Product added';//触发器功能
- MySQL之中同一数据库中的两个表可具有相同名字的触发器;(其他DBMS不允许);
- 最好在数据库范围内使用唯一的触发器名;
- 只有表才指出触发器,视图不支持;
- 每个表最多支持6个触发器(每条insert delete update之前和之后);
- 单一触发器不能与多个事件或多个表关联;
- 如果before触发器失败,则MySQL将不执行请求操作;
- 如果before触发器或语句本身失败,则将不执行after触发器;
- 触发器按照每个表每个事件每次地定义,每个表每个事件每次只允许一个触发器。
删除触发器
Drop Trigger newproduct;
触发器不可以更新或覆盖。想修改必须删除再创建。
使用触发器
insert触发器
- insert触发器代码内,可使用NEW的虚拟表,访问被插入的行;
- before insert触发器内,NEW之中的值可以被修改;
- 对于auto_increment列,NEW在insert执行之前包含0,在insert执行之后包含新的自动生成的值;
delete触发器
- 可以引用一个名为OLD的虚拟表;
- OLD表只读,不可更新;
**例:**使用OLD保存将要被删除的行到一个存档表之中
Create Trigger deleteorder
Before Delete On orders
For each Row
Begin
Insert Into archive_orders(order_num,order_data,cust_id)
Value(OLD.order_num,OLD.order_data,OLD.cust_id)
End;
//如果由于某种原因,订单不能存档,delete将被放弃操作
//使用begin和end块的优点是触发器可以容纳多条SQL语句
update触发器
- 引用一个OLD虚拟表访问更新之前的值;
- 引用一个NEW虚拟表访问新更新的值;
- OLD表只读,不可更新;
- 在before update触发器中,NEW中的值可以被更新(允许更改将要用于update语句之中的值);
管理事务处理
- 并非所有引擎都支持事务处理;
- 事务处理可以用来维护数据库的完整性;
- 设计良好的数据库模式都是关联的;
- 事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果;
- 利用事务处理,可以保证一组操作不会在中途停止,要么完全执行完毕,要么完全不执行;
事务处理核心
- 事务(transaction):一组SQL语句;
- 回退(rollback):撤销指定的SQL语句过程;
- 提交(commit):将未存储的SQL语句结果写入数据库表;
- 保留点(savepoint):事务处理中设置的临时占位符,你可以对他发布回退。
控制事务处理
标识事务处理开始
Start transaction
Rollback
//存储引擎设置为InnoDB,
SELECT * FROM customer;//确认表格数据;
BEGIN;//事务开始
DELETE FROM customer;//删除数据;
SELECT * FROM customer;//再次查看数据;
ROLLBACK;//回滚到初始状态;
SELECT * FROM customer;//再次查看数据;
//执行ROLLBACK后,删除的记录恢复到了BEGIN之前的状态;
//如果将ROLLBACK换成COMMIT,那么事务将会提交,删除的记录无法恢复。
Commit
- 引擎为MyISAM时,不支持事务处理,命令执行后就一定会提交,这种默认的提交方式被称为自动提交;
- 引擎设置为InnoDB时,设置自动提交功能是开启,命令执行就会提交,相反则必须执行COMMIT才提交;
- 当执行commit或者rollback之后,事务会自动关闭(将来的更改会隐含提交);
SET AUTOCOMMIT=0或1;//设置自动提交功能
使用保留点
- 支持部分回退事务处理;
- 设置保留点 savepoint delete1;
- 回退到该点rollback to delete1;
- 保留点越多越好;
- 保留点会自动释放,也可以用release savepoint释放。
最后
以上就是紧张羽毛为你收集整理的使用触发器/管理事务处理使用触发器管理事务处理的全部内容,希望文章能够帮你解决使用触发器/管理事务处理使用触发器管理事务处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复