Mysql InnoDB事务

http://www.cnblogs.com/benshan/archive/2013/01/19/2867244.html

事务的四个特性

1、原子性(atomicity)原子性是指整个数据库事务是不可分割的工作单位

2、一致性(consistency)一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。

3、隔离性(isolation)一个事务的影响在该事务提交之前对其他事务都不可见------这通过锁来实现

4、持久性(durability)事务一旦提交,其结果就是永久性的


事务的实现

隔离性通过Mysql InnoDB锁就可以实现,

原子性、一致性、持久性通过数据库的redo和undo来完成


隐式提交的SQL语句

以下这些SQL语句会产生一个隐式的提交操作,即执行完这些语句后,会有一个隐式的COMMIT操作。

1、DDL语句:ALTER DATABASE...UPGRADE DATA DIRECTORY NAME、。。。。

2、用来隐式的修改mysql架构的操作:CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD。

3、管理语句:ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE 、REPAIR TABLE。


 

对于事务操作的统计

QPS:question per second,每秒请求数

TPS:transaction per second,每秒事务处理的能力

计算TPS的方法是(com_commit+com_rollback)/time,用这种方法的前提是,所有的事务必须都是显式提交的。


事务的隔离级别

SQL标准定义的四个隔离级别为:

1、READ UNCOMMITED

2、READ COMMITED

3、REPEATABLE READ

4、SERIALIZABLE

查看当前会话的事务隔离级别

 

查看全局事务隔离级别

 

在SERIALIZBLE的事务隔离级别,InnoDB存储引擎会对每个SELECT语句后自动加上LOCK IN SHARE MODE,即给每个读取操作加一个共享锁,因此在这个事务隔离级别下,读占用锁了,一致性的非锁定读不再予以支持,一般不再本地事务中使用SERIALIZBLE的隔离级别,SERIALIZABLE的事务隔离级别主要用于InnoDB存储引擎的分布式事务。

在READ COMMITED的事务隔离级别下,除了唯一性的约束检查以及外键约束的检查需要Gap Lock,InnoDB存储引擎不会使用Gap Lock的锁算法。


分布式事务

通过XA事务可以来支持分布式事务的实现,在使用分布式事务时,InnoDB存储引擎必须使用SERIALIZABLE的隔离级别,查看是否启用了XA事务支持(默认开启)

 

在默认配置下,mysql数据库总是自动提交的。

posted @ 2017-03-12 22:24  xiaobaxiing  阅读(378)  评论(0编辑  收藏  举报