MySQL实战(五)数据库事务

来源:互联网 发布:js隐藏table 编辑:程序博客网 时间:2024/06/05 19:47

1、Mysql数据库获取数据的时候可能出现的现象

脏读:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个实物访问了这个数据,并且使用了这个数据。

不可重复读:在一个事务内,对一个数据进行了多次的读取;这个事务还没有结束的时候,另一个事务对数据进行了修改,导致第一个事务前后读取到的数据不一致,产生不可重复读。

幻读:第一个事务对表中的数据进行了修改,这种修改涉及到表的全部数据;第二个事务也修改了表中的数据,这种修改主要是向表中插入一条记录,导致操作第一个事务的用户发现表中还有没有修改的数据行,像是幻觉一样。

2、MySQL的隔离级别

针对出现的现象,MySQL标准定义了4类隔离级别,用来限定事务内外的哪些改变是可见的,哪些是不可见的。隔离级别由低到高:Read Uncommitted < Read Committed < Repeatable Read < Serializable。对应隔离级别产生的差异有:

===========================================================================================
       隔离级别               脏读(Dirty Read)          不可重复读(NonRepeatable Read)     幻读(Phantom Read) 
===========================================================================================

未提交读(Read uncommitted)        可能                            可能                       可能

已提交读(Read committed)          不可能                          可能                        可能

可重复读(Repeatable read)          不可能                          不可能                     可能

可串行化(Serializable )                不可能                          不可能                     不可能

===========================================================================================

3、查看MySQL会话级别

可以通过以下查看全局和会话的隔离级别:

SELECT @@global.tx_isolation;SELECT @@session.tx_isolation;SELECT @@tx_isolation;
设定数据库的实物隔离级别,可以通过

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

4、基于加锁的事务

MySQL锁有两种,shared lock 和exclusive lock,也称为读锁和写锁。

读锁根据锁住的数据不同,分为普通锁和谓词锁。谓词锁是指锁住满足某一查询条件的所有数据项,不仅包含当前数据库中的数据项,也包括即将插入、更新、删除的数据项。多个并发执行的事务是串行的。



0 0
原创粉丝点击