1、事务一致性
举个例子:假如你去银行转1000元给你的朋友,所有的操作都完成之后,并且提示你转账成功(假设银行是立即转账,不存在延时的情况),你发现你的账户上减少了1000元,但是你打电话给你的朋友确认时...在数据库的实现的应用场景中,一致性可以分为数据库外部的一致性和数据库内部的一致性:
i、外部的一致性:由外部的应用编码来实现,即银行的应用在进行转账的操作时,必须在同一事务内部调用对账户A和账户B的操作...)
b、再对到数据库崩溃前没有执行完成的事务进行UNDO(撤销所有执行了一部分,但是有一部份还没有执行完成,且尚未提交的操作,保证事务的原子性)
c、crash recovery结束后,数据库恢复了一致性...为了保证数据的一致性,引入隔离性,既保证每一个事务看到的数据是一致的,确保一个事务在处理数据的同时,没有其他事务对自己正在处理的数据进行干扰,就好像其他事务都是不存在的一样,即事务在并发执行后的状态,和串行执行后的状态时一样的...下面是通过"锁"解决事务在多线程下的数据不一致性问题:
a、悲观锁
即事务将当前操作所有涉及到的对象加锁,操作完成后释放给其他对象使用,为了尽可能的提高性能,发明了各种粒度(数据库级/表级/行级)/各种性质