我是靠谱客的博主 紧张羽毛,最近开发中收集的这篇文章主要介绍使用触发器/管理事务处理使用触发器管理事务处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用触发器/管理事务处理

  • 使用触发器
    • 触发器
    • 创建触发器
    • 删除触发器
    • 使用触发器
      • insert触发器
      • delete触发器
      • update触发器
  • 管理事务处理
    • 事务处理核心
    • 控制事务处理
      • 标识事务处理开始
      • Rollback
      • Commit
      • 使用保留点

使用触发器

触发器类似信号

触发器

触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或者位于begin和end之间的一组语句);

  1. delete
  2. insert
  3. update

创建触发器

Create Trigger newproduct//触发器姓名
After Insert On products//触发器关联的表和何时执行
For each Row Select 'Product added';//触发器功能
  1. MySQL之中同一数据库中的两个表可具有相同名字的触发器;(其他DBMS不允许);
  2. 最好在数据库范围内使用唯一的触发器名;
  3. 只有表才指出触发器,视图不支持
  4. 每个表最多支持6个触发器(每条insert delete update之前和之后);
  5. 单一触发器不能与多个事件或多个表关联;
  6. 如果before触发器失败,则MySQL将不执行请求操作;
  7. 如果before触发器或语句本身失败,则将不执行after触发器;
  8. 触发器按照每个表每个事件每次地定义,每个表每个事件每次只允许一个触发器。

删除触发器

Drop Trigger newproduct;
触发器不可以更新或覆盖。想修改必须删除再创建。

使用触发器

insert触发器

  1. insert触发器代码内,可使用NEW的虚拟表,访问被插入的行;
  2. before insert触发器内,NEW之中的值可以被修改;
  3. 对于auto_increment列,NEW在insert执行之前包含0,在insert执行之后包含新的自动生成的值;

delete触发器

  1. 可以引用一个名为OLD的虚拟表;
  2. 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触发器

  1. 引用一个OLD虚拟表访问更新之前的值;
  2. 引用一个NEW虚拟表访问新更新的值;
  3. OLD表只读,不可更新;
  4. 在before update触发器中,NEW中的值可以被更新(允许更改将要用于update语句之中的值);

管理事务处理

  1. 并非所有引擎都支持事务处理;
  2. 事务处理可以用来维护数据库的完整性;
  3. 设计良好的数据库模式都是关联的;
  4. 事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果;
  5. 利用事务处理,可以保证一组操作不会在中途停止,要么完全执行完毕,要么完全不执行;

事务处理核心

  1. 事务(transaction):一组SQL语句;
  2. 回退(rollback):撤销指定的SQL语句过程;
  3. 提交(commit):将未存储的SQL语句结果写入数据库表;
  4. 保留点(savepoint):事务处理中设置的临时占位符,你可以对他发布回退。

控制事务处理

标识事务处理开始

Start transaction

Rollback

//存储引擎设置为InnoDB,
SELECT * FROM customer;//确认表格数据;
BEGIN;//事务开始
DELETE FROM customer;//删除数据;
SELECT * FROM customer;//再次查看数据;
ROLLBACK;//回滚到初始状态;
SELECT * FROM customer;//再次查看数据;
//执行ROLLBACK后,删除的记录恢复到了BEGIN之前的状态;
//如果将ROLLBACK换成COMMIT,那么事务将会提交,删除的记录无法恢复。

Commit

  1. 引擎为MyISAM时,不支持事务处理,命令执行后就一定会提交,这种默认的提交方式被称为自动提交
  2. 引擎设置为InnoDB时,设置自动提交功能是开启,命令执行就会提交,相反则必须执行COMMIT才提交;
  3. 当执行commit或者rollback之后,事务会自动关闭(将来的更改会隐含提交);
SET AUTOCOMMIT=01;//设置自动提交功能

使用保留点

  1. 支持部分回退事务处理;
  2. 设置保留点 savepoint delete1;
  3. 回退到该点rollback to delete1;
  4. 保留点越多越好;
  5. 保留点会自动释放,也可以用release savepoint释放。

最后

以上就是紧张羽毛为你收集整理的使用触发器/管理事务处理使用触发器管理事务处理的全部内容,希望文章能够帮你解决使用触发器/管理事务处理使用触发器管理事务处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部