百度百科中解释:指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
我的理解:同一根绳上的蚂蚱,要活一起活,要死一起死,事务就是并发控制的单位。
1.读未提交(Read Uncommitted)引发脏读(读取了未提交的数据)
2.读已提交(Read Committed)这是大多数数据库系统默认的隔离级别,但不是MySQL默认的只能看见已经提交事务所做的改变引发不可重复读,不可重读读意味着我们同一事务执行完全相同的select语句时可能看到不一样的结果。 导致这种情况的原因可能有: (1)有一个交叉的事务有新的commit,导致了数据的改变; (2)一个数据库被多个实例操作时,同一事务的其他实例在该实例处理其间可能会有新的commit 多个commit提交时,只读一次出现结果不一致
3、重复读(Repeatable Read) 重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。重复读可以解决不可重复读问题。应该明白的一点就是,不可重复读对应的是修改,即UPDATE操作。但是可能还会有幻读问题。 因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。采用Serializable可以解决幻读问题
4.可串行化 (Serializable) Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
事务通常以begin(start) transaction 开始,以commit 或 rollback 结束。 commit 表示提交,将事务中所有对数据库的更新写会到磁盘的物理数据库中,事务正常结束。 rollback表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
