事务的四个特性
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数据库总是自动提交的。