一、基本介绍
what?
==多个链接==开启各自事务操作数据库,数据库系统要负责 ==隔离操作==,以保证各个链接在获取数据时的准确性。
隔离级别:定义了事务与事务之间的隔离程度。
不考虑隔离性,可能会引发一下问题:
- 脏读
一个事务读取到了另一个事务,==尚未提交的修改==。 - 不可重复读
不可重复读对应的操作为 ==修改/删除== - 幻读
幻读对应的操作为 ==插入==
二、具体分析
查看隔离级别
1 | 旧版 select @@tx_isolation; |
隔离级别的设置操作必须在==开启事务之前==,否则会不生效!!!。
1.读未提交 ——–set session transactionread committed
1 | 设置命令 |
有A、B两个链接,B的链接为 ==Read uncommitted==.
ALTER TABLE account
ADD name
VARCHAR(255);
A 连接的事务还在修改,但未提交,
B 处的链接就可以查看到 A 事务所做的修改—-
看到未提交的修改–脏读、不可重复读
看到插入的新数据—幻读
2.读已经提交
1 | set session transaction isolation level read committed |
A 、B:为 read commited
A、B均为commit
A未提交时,B不可以读到A修改的数据。
A提交后,B可以读到。
3.可重复读——-> mysql 默认级别
1 | set session transaction isolation level repeatable read; |
4.序列化
synchronized,线程同步(事务同步)
每一次读取到的数据都是最真实的,并且==效率最低的==.
当有另一个事务在进行的时候
三、怎么启动事务
三、操作
查看系统隔离级别
1
select @@global.transaction_isolation;
查看会话的级别
1
select @@transaction_isolation;
修改系统隔离
1
set global transaction isolation level 级别;
设置会话隔离级别
1
set ==session== transaction isolation level 级别;