mysql事务隔离级别
2018-06-18 00:43:52来源:未知 阅读 ()
Transaction Isolation Levels
InnoDB支持SQL1992标准中的四种隔离级别:READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE。默认的隔离级别是REPEATABLE READ。
通过SET TRANSACTION命令可以改变默认的隔离级别,为了让这种改变对所有用户的所有连接都生效,需要加上--transaction-isolation选项。
InnoDB通过不同的加锁策略来实现不同的隔离级别
REPEATABLE READ
这是InnoDB默认的隔离级别。在一个事务中,一致读会读到该事务中第一次读到的那个快照。这就意味着,在同一个事务中多次执行普通的SELECT语句返回的结果是一致的。
对于加锁读(SELECT ... FOR UPDATE或者SELECT ... LOCK IN SHARE MODE)、更新、删除语句,锁取决于语句是否使用了唯一索引或者范围类的检索条件。
- 对于用唯一索引作为检索条件,InnoDB只会锁发现的索引记录,而不会锁它前面的间隙
- 对于其它的检索条件,InnoDB锁定扫描的索引范围,用间隙锁或者next-key锁来阻塞其它会话向这个范围内的间隙中插入数据
参考 https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html
事务的特性
- 原子性:事务中的操作要么全部成功,要么全部失败
- 一致性:事务操作必须是将数据库从一个一致性状态带到另一个一致性状态。所谓一致指的是,比如转账,A和B都有100元,转账之前总共是200元,转账之后必须也是200元
- 隔离性:事务之间不会相互影响
- 持久性:事务提交以后对数据库所做的改变将永久保存下来
事务并发带来的问题
- 脏读:一个事务读到另一个事务未提交的数据
- 幻读:一个事务读到另一个事务已提交的数据,然而这种提交的数据涉及到整个表,比如插入和删除,看起来好像幻觉一样
- 不可重复读:一个事务中多次读取同一个数据返回的结果不一样
事务隔离级别
- 读未提交:允许一个事务看到另一个事务没有提交的数据
- 读已提交:允许一个事务看到另一个事务已提交的数据
- 可重复读:同一个事务中多次读取看到的数据始终一致
- 串行化:并发事务串行执行
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MySQL replace函数怎么替换字符串语句 2020-03-09
- PHP访问MySQL查询超时怎么办 2020-03-09
- mysql登录时闪退 2020-02-27
- MySQL出现1067错误号 2020-02-27
- mysql7.x如何单独安装mysql 2020-02-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash