事务:一个操作序列,要么同时执行,要么同时不执行,是一个不可分割的工作单位
事务有四大特性,原子性 一致性 持久性 与 隔离性
① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
③ Read committed (读已提交):可避免脏读的发生。
④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。
脏读是一个事务在修改某个数据但未提交,这时,另一个事务也来访问该数据,这时就会造成两个事务得到的数据不一致,比如,A 向 B 转 100元,这时 B 发现钱确实到账了,但只要 A 不提交该事务,所有的事务都将回滚, B 会发现 钱没能到账
不可重复读是指事务1在读取某一数据,而事务2立马修改了这个数据并提交给事务给数据库,当事务1再次读取该数据就会得到不同的结果,
幻读:事务非独立执行时发生的一种现象。比如:事务1对一个表中的所有行的某个数据项进行修改操作如从 1 修改成 2,这时事务2又对这个表中插入了一行数据,并且在这个数据项的数据为 1 时就提交给数据库。如果事务1的操作用户查看刚刚修改的数据,会发现还有一行没有修改,其实这一行是事务2添加的,这就是 幻读
级别越高,执行的效率越低, MySQL 数据库, 默认是Repeatable read (可重复读) ,
在MySQL数据库中查看当前事务的隔离级别:
select @@tx_isolation;
在MySQL数据库中设置事务的隔离 级别:
set [glogal | session] transaction isolation level 隔离级别名称;
set tx_isolation=’隔离级别名称;’
设置数据库的隔离级别一定要在开启事务之前,还有隔离级别的设置只对当前连接有效,对于MySQ,一个命令窗口就相当于一个链接,当前串口设置的隔离级别只对当前窗口中的事务有效