事务的介绍
事务就是一组原子性的sql查询,或者说是一个独立的工作单元。简而言之,事务内的语句要么全部执行成功,要么全部执行失败。
在Mysql中,事务支持是在引擎层实现的,但并不是所有的Mysql引擎都支持事务,比如MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。
提到事务,我们肯定会想到ACID:
原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability)
隔离级别
当数据库中有多个事务同时执行时,就可能会出现脏读、不可重复读、幻读等问题,因为就有了事务隔离级别的概念。
SQL标准正定义了四种隔离级别:
READ UNCOMMITTED (未提交读)
事务中的修改,即使还没有提交,对其他事务都是可见的。事务可以读取未提交的数据,也被称为脏读(Dirty Read)。
READ COMMITTED(提交读)
一个事务提交后,所做的变更才能被其他事务看到。这个级别也叫不可重复读,因为事务中执行2次相同的查询,可能得到的结果是不一样的。
REPEATABLE READ(可重复读)
一个事务执行的过程中,总是和这个事务在启动时看到的数据是一致的。当然在这个级别下,未提交的数据变更对其他事务也是不可见的。
SERIALIZABLE(可串行化)
对同一行记录,写和读都会加