一。什么是事务?
mysql事务就是一组sql语句操作,一个事务内的所有sql操作要么同时失败,要么同时成功
二。事务的特点:
ACID:
A指的是原子性:事务是最小的工作单位,不可再分
C指的是一致性:事务必须保证多条DML语句同时成功或者同时失败
I指的是隔离性:事务与事务之间有隔离级别
D指的是持久性:最终数据必须持久化到硬盘中,事务才算成功的结束
三。事务的隔离级别
事务有4个隔离级别:
读未提交(read uncommitted)
读已提交(read committed)
可重复读(repeatable read)
串行化读或叫序列化读(serializable read)
为什么要设置隔离级别呢?
因为不设置事务隔离级别会存在一些问题:
假如我开启了两个事务,事务A和事务B
1.读未提交:意思是对方事务为提交,我们当前事务也可以读取到对方提交的数据
存在问题:脏读问题,就是由于对方事务为提交,可能回滚,这样读到的未提交的数据不会持久化到硬盘中,读的就是假的数据
2.为了解决脏读问题,出现了第二级别:读已提交:
意思是只能读到对方事务提交的数据
存在的问题:不可重复读,就是我们当前事务从开启到结束之间,读取到的数据不一致
3.为了解决不可重复读,出现了第三级别:可重复读
隔离的级别更厚,即使对方事务提交了,也读不到,即只要我们当前事务没有接受,读取到的数据都是一样的
存在的问题:幻读:就是对方事务提交了,数据已经持久化到了硬盘当中,但是我们却读不到,即我们读取的数据时假象
使用start transaction开启事务,关闭了制动提交机制
使用set global transaction isolation level 隔离级别
使用select @@global transaction_isolation 查看事务的隔离级别