mysqlinnodb事务模式与锁定

mysqlinnodb事务模式与锁定

ID:30362145

大小:84.47 KB

页数:9页

时间:2018-12-29

mysqlinnodb事务模式与锁定_第1页
mysqlinnodb事务模式与锁定_第2页
mysqlinnodb事务模式与锁定_第3页
mysqlinnodb事务模式与锁定_第4页
mysqlinnodb事务模式与锁定_第5页
资源描述:

《mysqlinnodb事务模式与锁定》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、MysqlInnoDB事务模式与锁定8InnoDB事务模式与锁定在InnoDB事务处理模式中,thegoalhasbeentocombinethebestpropertiesofamultiversioningdatabasetotraditionaltwo-phaselocking.InnoDB进行行级的锁定,并以与Oracle非锁定读取(non-locking)类似的方式读取数据。InnoDB中的锁定表的存储是如此(space-efficiently)而不再需要扩大锁定:典型特色是一些用户可能锁定数据库中的任意行或任意行的子集,而不会引起InnoDB内存运行溢出。在InnoDB中,所有的

2、用户操作均是以事务方式处理的。如果MySQL使用了自动提交(autocommit)方式,每个SQL语句将以一个单独的事务来处理。MySQL通常是以自动提交方式建立一个服务连接的。如果使用SETAUTOCOMMIT=0关闭自动提交模式,就认为用户总是以事务方式操作。如果发出一个COMMIT或ROLLBACK的SQL语句,它将停止当前的事务而重新开始新事务。两个语句将会释放所有在当前事务中设置的InnoDB锁定。COMMIT意味着永久改变在当前事务中的更改并为其它用户可见。ROLLBACK正好相反,它是取消当前事务的所有更改。如果以AUTOCOMMIT=1建立一个连接,那么用户仍然可以通过以BE

3、GIN开始和COMMIT或ROLLBACK为语句结束的方式来执行一个多语句的事务处理。在SQL-1992事务隔离级(transactionisolationlevels)规定的条款中,InnoDB默认为REPEATABLEREAD。从4.0.5开始,InnoDB提供了SQL-1992标准中所有的4个不同的事务隔离级。你可以my.cnf的[mysqld]区中设置所有连接的默认事务隔离级:transaction-isolation={READ-UNCOMMITTED

4、READ-COMMITTED

5、REPEATABLE-READ

6、SERIALIZABLE}用户也可以通过下面的SQL语句为单个连接或

7、所有新建的连接改变隔离级:SET[SESSION

8、GLOBAL]TRANSACTIONISOLATIONLEVEL{READUNCOMMITTED

9、READCOMMITTED

10、REPEATABLEREAD

11、SERIALIZABLE}注意在这个SQL语句的语法中没有连字符。如果你在上述语句中详细指定关键字GLOBAL,它将决定新建连接的初始隔离级,但不会改变已有连接的隔离级。任何用户均可以更改自身会话的隔离级,即使是在一个事务处理过程中。在3.23.50以前的版本中SETTRANSACTION对InnoDB表无任何效果。在4.0.5以前的版本中只有REPEATABLEREAD和SERIALIZ

12、ABLE可用。可以通过下列语句查询全局和当前会话的事务隔离级:SELECT@global.tx_isolation;SELECT@tx_isolation;在InnoDB的行锁中使用所谓的next-keylocking。这就意味着,除了索引记录外,InnoDB还可以锁定该索引记录前部"间隙"('gap')以阻塞其它用户在索引记录前部的直接插入。next-keylock意思是锁定一个索引记录以及该记录之前的间隙(gap)。gaplock就是只锁定某些索引记录之前的间隙。InnoDB中的隔离级详细描述:READUNCOMMITTED这通常称为'dirtyread':non-lockingSELE

13、CTs的执行使我们不会看到一个记录的可能更早的版本;因而在这个隔离度下是非'consistent'reads;另外,这级隔离的运作如同READCOMMITTED。READCOMMITTED有些类似Oracle的隔离级。所有SELECT.FORUPDATE和SELECT.LOCKINSHAREMODE语句只锁定索引记录,而不锁定之前的间隙,因而允许在锁定的记录后自由地插入新记录。以一个唯一地搜索条件使用一个唯一索引(uniqueindex)的UPDATE和DELETE,仅仅只锁定所找到的索引记录,而不锁定该索引之前的间隙。但是在范围型的UPDATEandDELETE中,InnoDB必须设置ne

14、xt-key或gaplocks来阻塞其它用户对范围内的空隙插入。自从为了MySQL进行复制(replication)与恢复(recovery)工作'phantomrows'必须被阻塞以来,这就是必须的了。Consistentreads运作方式与Oracle有点类似:每一个consistentread,甚至是同一个事务中的,均设置并作用它自己的最新快照。REPEATABLEREAD这是InnoDB默认的事务隔离

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。