事务的ACID属性
<1>原子性
原子性是指事务是一个不可分割的单元,事务中的操作要么都发生,要么都不发生
<2>一致性
一致性是指,事务必然从一个一致性状态转换到另一个一致性状态
<3>隔离性
事务的隔离性是指,一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的
其他事务是隔离的,并发执行的各个事务之间不能互相干扰
<4>持久性
持久性是指,事务一旦提交,他对数据库的改变就是持久性的,接下来的操作对这个事务不会有任何影响
数据库的并发问题
<1>脏读
脏读:对于两个事务T1,T2, T1读取了已经被T2更新但是还没有提交的内容,当T2回滚以后,T1读到的数据就是无效的了
不可重复读:对于两个事务T1, T2,T1读取了一个字段,然后这个字段被T2更新了,之后T1再读取这个字段,这个字段就不同了。
幻读:对于两个事务T1, T2,T1从字段中读取了一行数据,然后T2在表中插入了一些新的行,之后,如果T1再读取这个表,就会发现多了一些行
remark后面两种情况我们有时会认为是正常的,所以有时就不对其进行处理,只处理脏读问题
事务的几种隔离级别
REPEATABLE READ: 能够解决前面两个问题,使用这个隔离级别的话,在连接还没有断开之前,T1读取到的字段都是T2提交更新前的字段
Mysql 命令行验证事务的隔离级别
查看当前的事务隔离级别:
select @@tx_isolation;
设置当前连接的隔离级别:
set transaction isolation level read commited;
设置数据库的全局隔离级别:
set global transaction isolation level read commited;