事务
事务特性:
原子性:从操作行为角度来讲--事务操作作为一个统一的操作单元,要么都执行,要么都不行。
一致性:从被操作的数据来讲--事务执行前后,事务操作到的数据必须符合业务逻辑,保持前后一直。
持久性:依然是从被操作的数据来讲--事务操作后的数据,是永久执行了的,应该是写到磁盘上的。
隔离性:事务之间操作,应该具有一定的隔离性,不同的隔离级别,会脏读、幻读、不可重复读等现象。
uncommit-未提交
脏读:事务A读到了事务B尚未提交的内容
committed -已经提交
幻读:事务A读取到了事务B已经提交的insert或delete操作
不可重复读:事务A读取到了事务B已经提交的update操作,导致事务A在事务未结束之前,读取同一条数据两次,如果中间事务B修改了数据,并提交了,那么事务A会读取到不同的结果。
针对事务的隔离性,
数据库定义了四种隔离级别:
serializable:串行化,可以避免脏读、幻读、不可重复读。
repeatable read:可重复读,针对的是update操作,使用行锁。可以避免脏读和不可重复读。幻读,是insert和delete操作,避免不了
read committed:读已提交,可以避免脏读。幻读和不可重复读是未提交是否,不能避免
read uncommitted :读未提交,三种情况都避免不了。
mysql默认使用repeatable read 。可以通过 set session transaction isolation level xxx啦设置隔离级别。
事务传播行为(7个)- A方法调用B方法,对B来说。以下几个是比较常用的:
propagation_required、propagation_supports、propagation_required_new、propagation_not_required.
好博分享:https://blog.csdn.net/happydecai/article/details/80338053