事务(Transaction)由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。
事务管理
-
事物的ACID特性:
- Atomicity(原子性):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
- Consistency(一致性):从一个一致性到另一个一致性。
- Isolation(隔离性):多个事物在并发环境中,之间互相独立,互不影响。
- Durability(持久性):事务提交后,数据将会被持久保存。
-
事务的隔离级别
- READ_UNCOMMITTED(读未提交):一个事务可以读取另一个未提交事务的数据。
- READ_COMMITED(读已提交):一个事务要等另一个事务提交后才能读取数据。
- REAPEATABLE_READ(可重复读):开始读取数据(事务开启)时,不再允许修改操作
- SERIALIZALE(序列化):最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读
-
事务并发引起的问题
- Dirty read(脏读):一个事务读取了另一个事务改写但尚未提交的数据时。如果改写在稍后被回滚了,那么第一个事务获取的数据就是无效的。
- Nonrepeatable read(不可重复读): 一个事务在执行相同的两次查询却获得两个不同的查询结果。原因通常是在两次查询间数据被另一个并发事务修改。
- Phantom read(幻读):一个事务在读取数据时,另一个并发事务插入了新的数据,导致是第一个事务在执行查询时数据与预期不符。
事务的语法
start transaction;
/begin;
commit;
确认当前修改;rollback;
放弃当前的修改;- 查看当前会话中事务的隔离级别
select @@tx_isolation;
- 设置当前会话中的事务隔离级别
set session transaction isolation level read uncommitted;
不同的隔离级别的锁
- 读未提交(RU):由行级锁,没有间隙锁。他与RC的区别是能够查询到未提交的数据。
- 读已提交(RC):有夯机所,没有间隙锁。读不到没有提交的数据,
- 可重复度(RR):由行级锁,有间隙锁。每次读到的数据都是一样的,但是有幻读的发生。
- 序列化(S):由行级锁,也有间隙锁,度表时已经上锁。
隐式提交
对表结构进行修改时事务会自动提交
DQL:查询语句
DML:写操作(增删改)
DDL:定义语句(建库、建表、修改表、索引操作、存储过程、视图)
DCL:控制语言(给用户授权或删除授权)