事务的隔离性

事务的隔离性

作者:LAMP小白  点击:1986  发布日期:2012-10-28 18:57:00  返回列表
因为MYSQL是一个多用户数据库系统,所以不同的客户可能会在用以时间视图访问同一个数据库,诸如MYISAM之类的存储引擎使用了数据表级的

锁定机制来保证不同的客户不能同时修改同一个数据表,但这种做法在更新量比较大的系统上会导致并发并能下降,InnoDB存储引擎采用了另

一种策略,他使用数据行级的锁定机制为客户对数据表的访问提供了更细致的控制,提供了比锁表机制更强大的并发性能,不过这里也出现了一

个问题,就是另一个客户的事务在何时才能看到另一个客户事务作出的修改

InnoDB实现的事务隔离机制能让客户控制他们想看到其他事务做的哪些修改
它提供了多种不同的隔离级别以允许或预防多个事务同时运行时可能发生的各种各样的问题

脏读(dirty read)指某个事务所作出的修改在他尚未被提交时就可以被其他事务看到,其他事务以为数据行已经被修改了,但对数据行作出的

修改还有可能被回滚,这将导致数据库里的数据发生混乱

不可重复读取(nonrepeattable read)值同一个事务使用同一条SELECT语句每次读取到的结果不一样.比如有一个事务执行了两次SELECT语句,

但另一个事务在这条SELECT语句两次执行之间修改了一些数据行,就会发生这种问题

幻影数据行(phantom row)指某个事务突然看到一个它以前没有见过的数据行,比如一个事务刚执行完一条SELECT语句就有另一个事务插入了

一个新的数据行

为了解决这些问题 InnoDB一共了4中隔离级别

级别 脏读 不可重复读取 幻影数据行

READ UNCOMMITTED 是 是 是
READ COMMITTED 否 是 是
REPEATABLE READ 否 否 否
SERIALIZABLE 否 否 否

默认使用的是 REPEATABLE READ

可以通过在启动服务器时使用 --transaction -isolation选项或在服务器运行时勇士 SET TRANSACTION来改变

SET GLOBAL TRANSACTION ISOLATION LEVEL level 改变全局隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL level 改变本次会话后续的隔离级别
SET TRANSACTION ISOLATION LEVEL level 只作用于下一个事务


上一篇:事务 下一篇:快递查询API
0