MySQL的事务隔离级别
MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ) 1) 未提交读(READ UNCOMMITTED) 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)(隔离级别最低,并发性能高)。 2) 提交读(READ COMMITTED) 本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读)。 会出现不可重复读、幻读问题(锁定正在读取的行) 3) 可重复读(REPEATABLE READ) 在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的,但是,会有幻读现象。会出幻读(锁定所读取的所有行)。 4) 串行化(SERIALIZABLE) 读操作会隐式获取共享锁,可以保证不同事务间的互斥(锁表)。 四个级别逐渐增强,每个级别解决一个问题。 1) 脏读。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据。 2) 不重复读。解决了脏读后,会遇到,同一个事务执行过程中,另外一个事务提交了新数据,那么本事务先后两次读到的数据结果会不一致。 3) 幻读。解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。但是