MySQL中有 MyISAM(5.5.8版之前) 和 InnoDB(5.5.8版开始)
因为只有InnoDB数据库引擎支持事务,所以才会引出隔离级别
事务
概念:数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
事务的四种特性(ACID)
原子性(Atomicity)
: 要么全部成功要么全部失败。
一致性(Consistency)
:事务执行前和事务执行后数据总量不变
隔离性(Isolation)
:事务与事务之间互不干扰。
持久性(Durability)
:事务一旦被提交了,那么对数据库中的数据的改变就是永久的。
脏读、不可重复读、幻读
- 脏读:脏读也俗称“读未提交”,顾名思义,就是某一事务A读取到了事务B未提交的数据。
- 不可重复读:在一个事务内,多次读取同一个数据,却返回了不同的结果。实际上,这是因为在该事务间隔读取数据的期间,有其他事务对这段数据进行了修改,并且已经提交,就会发生不可重复读事故。
- 幻读:幻读是指当事务不独立执行时,插入或者删除另一个事务当前影响的数据而发生的一种类似幻觉的现象。
从上面可以看出脏读和不可重复读是的错误,幻读是的错误
事务的隔离级别名称
Mysql查看隔离级别
select @@global.tx_isolation #查看全局的隔离级别
SELECT @@tx_isolation #查看会话的隔离级别
show variables like 'tx_isolation' #查看会话的隔离级别
Mysql设置隔离级别
①设置全局隔离级别
READ UNCOMMITTED(读未提交)
READ COMMITTED(读已提交)
REPEATABLE READ(可重读)
SERIALIZABLE(串行化)
set global transaction isolation level 隔离级别
②设置会话隔离级别
READ UNCOMMITTED(读未提交)
READ COMMITTED(读已提交)
REPEATABLE READ(可重读)
SERIALIZABLE(串行化)
set session transaction isolation level 隔离级别
③通过配置文件设置隔离级别(打开“mysql.ini”文件,添加“transaction-isolation=事务级别”语句即可)
READ-UNCOMMITTED(读未提交)
READ-COMMITTED(读已提交)
REPEATABLE-READ(可重读)
SERIALIZABLE(串行化)
transaction-isolation = 隔离级别