bluesea,腾讯金融云专家工程师,从事分布式数据库TDSQL研发工作。出版著作:《数据库查询优化器的艺术 原理解析与SQL性能优化》、《数据库事务处理的艺术 事务管理与并发控制》,广受好评。同时,bluesea还是中国人民大学信息学院工程硕士企业导师。
TDSQL是一个稳定运行了十年之久的分布式数据库,不仅支撑了腾讯公司的计费业务,而且还在微众银行等金融单位的核心业务系统稳定、高效地运行了四年之久。这几年,TDSQL在技术层面不断进步,研发了很多新特性,诸如多级分区、热点更新、隐含主键、分布式事务等,不仅有力的支撑了事务型的数据库应用,而且在体系结构上也朝Spanner架构上迈进,是一个名副其实的NewSQL系统。
MySQL/TDSQL的事务处理技术,主要包括四个方面的内容。其中,核心重点是并发控制技术。
第一,数据异常现象,这里不仅介绍有大家熟知的、SQL标准规定的三种读数据异常,还有其他的八种异常,会极大扩展大家对数据异常的认识。
第二,MySQL的事务处理技术,包括ACID的各个内容。
第三,MySQL的并发访问控制技术。并发控制技术是数据库事务处理的核心技术。可以说,没有事务处理,数据库就不能算是数据库;没有并发控制技术,事务处理也只是一个名词而已。毫不夸张地说,并发控制技术是核心技术的核心。
第四,基于对MySQL的认识,可以理解主流的数据如Oracle、Informix
首先,我们谈第一个问题:数据异常现象有哪些?
这列出了大家都熟悉的三种读数据异常,分别是脏读、不可重复读、幻读。我们看其中一个,比如说脏读。第一步,T2事务修改了数据行row;第二步,T1事务对同一个数据行row读取;第三步,T2事务回滚。这对于事务T1而言,读到的数据是将被回滚的数据,这就是脏读。
有朋友会问,脏读,也没有什么大不了的。试想一下,一个骗子T2转帐1000元给事务T1,事务T1检查自己的账户,入账了1000元,然后事务T1把一件衣服卖给了骗子T2,之后骗子T2拿到衣服后回滚了转账1000元的操作,然后逃之夭夭了。事务T1既没有拿到钱还丢失了衣服,损失很大。所以要避免这样的异常发生。
这三个读异常现象,是大家熟知的,也是SQL标准所定义的数据异常现象。那么,除了读异常,还有其他的数据异常吗?
比如说脏写。第一步,事务T1修改数据行row;第二步,事务T2也修改数据行row并提交,数据修改生效。事务T2认为自己的操作是成功的。但不幸的事情发生了,第三步,事务T1回滚了,用旧值替换了被事务T2写过的值。这意味着事务T2存入银行的钱,丢失了,因为帐本上只记着第一步事务T1读取的数据值。这就是写数据发生的数据不一致的现象。
那么,除了这些读和写异常,还有其他的数据异常吗?