mysql默认的隔离级别是可重复读
oracle默认的隔离级别是读已提交
任何支持事务的数据库,都必须具备四个特性,分别是:原子性(Atomicity) 、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
-
原子性 事务必须具有原子性,当数据修改时,要么全都执行,要么全都不执行。
-
一致性 一个事务在执行之前和执行之后,数据库数据必须保持一致性
-
隔离性 隔离性是指当多个用户并发访问数据库时, 比如同时访问一张表,每一个用户开启的事务,不能被其他事务所做的操作干扰, 多个并发事务之间,应当相互隔离。
例如:对任何一对事务T1和T2,对T1而言,T2要么在T1开始之前已经结束, 要么在T1完成之后再开始执行。
-
持久性 事务一旦提交,对于数据库中数据的改变是永久性的, 即使数据库发生故障也不会丢失已经提交过的事务
隔离级别
-
串行话:这是数据库最高的隔离级别, 也就是一个一个排队执行。可以避免,“脏读”、“不可重复读”、“幻读”, 但是执行效率特别差,性能开销也最大,所以基本没人会用。
-
读已提交:就是只能读到已经提交了的内容。 这是各种系统中最常用的一种隔离级别,也是SQL Server和Oracle的默认隔离级别。 这种隔离级别能够有效的避免脏读
-
可重复度:就是专门针对“不可重复读”这种情况而制定的隔离级别, 它可以有效的避免“不可重复读”。而它也是MySql的默认隔离级别。
-
读未提交: 最低的隔离级别。就是可以读到未提交的内容。 因此,在这种隔离级别下,查询是不会加锁的 ,这种隔离级别的一致性是最差的,可能会产生“脏读”、“不可重复读”、“幻读”。
-
脏读:就是读取到了另一事务未提交的数据。 这是相当危险的,因为很可能所有的操作都被回滚。
-
幻读:进行两次查询, 第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据。