MySQL脏读、不可重复读、幻读
事务的特性:
原⼦性:指处于同⼀个事务中的多条语句是不可分割的。
⼀致性:事务必须使数据库从⼀个⼀致性状态变换到另外⼀个⼀致性状态。⽐如转账,转账前两个账户余额之和为2k,转账之后也应该是2K。
隔离性:指多线程环境下,⼀个线程中的事务不能被其他线程中的事务打扰
持久性:事务⼀旦提交,就应该被永久保存起来。
事务隔离性问题:
如果不考虑事务的隔离性,会出现以下问题:
接口测试平台中接口内容的设计脏读:指⼀个线程中的事务读取到了另外⼀个线程中未提交的数据。
不可重复读(虚读):指⼀个线程中的事务读取到了另外⼀个线程中提交的update的数据。
幻读:指⼀个线程中的事务读取到了另外⼀个线程中提交的insert的数据。
隔离级别:
隔离级别脏读(Dirty Read)不可重复读(NonRepeatable Read)幻读(Phantom Read)
未提交读(Read uncommitted)可能可能可能创建数据库使用的语句是
已提交读(Read committed)不可能可能可能下拉框怎么设置的
电脑安装虚拟机教程可重复读(Repeatable read)不可能不可能可能
可串⾏化(Serializable )不可能不可能不可能
级别越⾼,数据越安全,但性能越低。
不可重复读与幻读⽐较相似,都是在⼀个事务中多次读取到不同的数据。⽹络上的总结如下:
不可重复读:所谓的虚读,也就是⼤家经常说的不可重复读,是指在数据库访问中,⼀个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交⽽引起的。⽐如事务T1读取某⼀数据,事务T2读取并修改了该数据,T1为了对读取值进⾏检验⽽再次读取该数据,便得到了不同的结果。
⼀种更易理解的说法是:在⼀个事务内,多次读同⼀个数据。在这个事务还没有结束时,另⼀个事务也访问该同⼀数据。那么,在第⼀个事务的两次读数据之间。由于第⼆个事务的修改,那么第⼀个事务读到的数据可能不⼀样,这样就发⽣了在⼀个事务内两次读到的数据是不⼀样的,因此称为不可重复读,即原始读取不可重复。
所谓幻读,是指事务A读取与搜索条件相匹配的若⼲⾏。事务B以插⼊或删除⾏等⽅式来修改事务A的结果集,然后再提交。
幻读是指当事务不是独⽴执⾏时发⽣的⼀种现象,例如第⼀个事务对⼀个表中的数据进⾏了修改,⽐如这种修改涉及到表中的“全部数据⾏”。同时,第⼆个事务也修改这个表中的数据,这种修改是向表中插⼊“⼀⾏新数据”。那么,以后就会发⽣操作第⼀个事务的⽤户发现表中还有没有修改的数据⾏,就好象发⽣了幻觉⼀样.⼀般解决幻读的⽅法是增加范围锁RangeS,锁定检锁范围为只读,这样就避免了幻读。简单来说,幻读是由插⼊或者删除引起的。
新手代码编程⼤致的区别在于不可重复读是由于另⼀个事务对数据的更改所造成的,⽽幻读是由于另⼀个事务插⼊或删除引起的。
不可重复读(虚读)和幻读的差别:
从总的结果来看, 似乎两者都表现为两次读取的结果不⼀致.
但如果你从控制的⾓度来看, 两者的区别就⽐较⼤:
对于前者, 只需要锁住满⾜条件的记录
对于后者, 要锁住满⾜条件及其相近的记录mysql怎么读英语
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论