一、事物的几个特征:ACID属性
原子性:事务的所有操作要么全部执行,要么全部不执行(注:一个事务包括多个操作,可有SQL编程决定);(注:转账操作);
一致性:隔离(单独)执行事务时,保持数据库的一致性;(如果一个事务作为原子从一个一致的db状态开始执行,则事务执行结束后,db必须仍然是一致的)【确保单个事务的一致性是程序员应该考虑的问题】
隔离性:每个事务执行时,都无法感知到DB内其他事务在并发执行;
事务的隔离性确保事务并发执行后的系统状态与这些事务以某种状态一个接一个执行后的状态是等价的;
持久性:事务执行结果对DB的改变必须是持久的,既是系统出现故障;
数据库的事务管理部件使得应用程序开发人员关注于单个事务上,而不需要考虑并发与容错问题;
思考:
1、哪些属性是DB需要完成的,哪些是app程序需要控制的;估计也就是单个事务的一致性;【理解】
2、什么是可串行化?【理解】
二、通过调度解决问题,一个并发调度效果上应该等同于一个串行调度,成为事务可串行化【理解】;
隔离实现的方案包括锁、时间戳、多版本及时间快照等;
事务的隔离性通过可串行化操作解决,但是串行化操作必然影响系统性能;因此,事务的隔离性包括4个级别,app可以权衡性能进行隔离级别选择;
既一个app可以为了性能选择较弱的隔离级别;需要权衡低隔离级别可能带来的数据不一致风险对应用的可接受程度;
事务可串行化调度是保证一致性的理想方法,实际app中,无需此严格要求;
【案例】事务的编写需要仔细考虑【理解】,航空公司的位置选择包括用户交互及位置信息更新2个部分。
我们要求事务的并发执行产生的任何调度的执行效果等价于这些事务按照某种串行顺序执行的效果==事务可串行化(4个级别);