Mysql学习笔记(七)
事务(Transaction)
(1)事务
(1)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如 SQL,C++或 Java)书写的用户程序的执行所引 起,并用形如 begin transaction 和 end transaction 语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。一个事务可以是一条 SQL语句,一组 SQL语句或整个程序。
(2)特性: 事务应该具有 4 个属性:原子性、一致性、隔离性、持续性。这四个属性通 常称为 ACID 特性:
✓ 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操 作要么都做,要么都不做。就是说不允许事务部分的执行。即使因为故障而使事 务不能完成,在 rollback 时也要消除对数据库的影响!
✓ 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致 性状态。一致性与原子性是密切相关的。就拿网上购物来说,你只有既让商品出 库又让商品进入顾客的购物车才能构成事务。
✓ 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操 作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相 干扰。如果多个事务并发执行,应象各个事务独立执行一样!
✓ 持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交, 它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对 其有任何影响。
(3)事务处理的两种方法:
✓ 用 begin,rollback,commit 来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
✓ 直接用 set 来改变 mysql 的自动提交模式 MYSQL 默认是自动提交的,也就是你提交一个 QUERY,它就直接执行,我们可以通过 set autocommit=0 禁止自动提交 set autocommit=1 开启自动提交 来实现事务的处理。
(2)事务的隔离级别
事务隔离级别分为4种:
READ UNCOMMITED // 允许幻读,脏读及不可重复读;
READ COMMITED // 允许幻读和不可重复读,不允许脏读;
REPEATABLE READ // 允许幻读,不允许脏读和不可重复读;
SERIALIZABLE READ // 不允许幻读,脏读及不可重复读;
Mysql默认的是REPEATABLEREAD级别。另外,随着事务的隔离级别越高,并发执行的性能就越低,所以适当选择级别并结合业务需求来选定级别设置。