虽然研发对数据库的要求不怎么高,但是不得不说数据库的这些知识在笔试过程中经常出现,
第一个 数据库的事务,事务的定义:事务是一系列操作的集合,这些操作要么全做,要么全不做。在关系数据库管理系统中,事务是数据库应用程序的基本逻辑处理单元,它可以是一条SQL语句,一组SQL语句或整个程序。在数据库管理系统中,事务的开始与结束可以由用户显示控制。如果用户没有显示地定义事务,则由DBMS按缺省规定自动划分事务。
事务的四个特性:原子性,一致性,隔离性和持续性。
1 原子性:原子性是事务的所有操作要么全部执行,要么都不执行,他的所有操作是一个整体。
2 一致性:一致性也称为正确性,是指事务执行的结果必须满足数据库的完整性限制,即使数据库从一个一致性变到另一个一致性状态。当数据库只包含陈功事务提交的结果时,就称为数据库处于一致性状态,如果数据库系统运行过程中发生故障,有些事务尚未完成就被迫中断,这些为完成的事务对数据库的修改有一部分已经写入数据库,这时数据库就处于不正确的状态,或者说不一致的状态。
3 隔离性:隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据库与其他事务是隔离的,在数据库运行中,常常有多个事务需要同时执行,如果这些事务分别操作不同的数据项,则这些事务可以并发执行,如果要访问相同的数据项,则事务之间的相互影响要特别注意。
4 持久性:持久性也称永久性,是指一个事务一旦提交,它对数据库中的数据的改动应该是永久性的。
四个特性密切相关,原子性是保证数据库一致性的前提,隔离性与原子性相互依存,持久性则是保证事务正确执行的必然要求事务ACID可能遭到破坏的因素主要有两个,一是事务在运行过程中被强行停止,二是多个事务并发运行时,不同事务的操作交叉执行。
事务的并发执行,目的:1 提高系统利用率,2 缩短事务的响应时间,
并发执行引起的问题:1 丢失更新,一般是由于两个事务(或多个)同时先读取了数据,然后重新写入了数据,比如A,B同时从ACCOUNT读取了1000元,然后A取出100,写会900,B取出200写会800,数据库中的数据为800,但是事实是从账户中取走了300,余额却只减少了200,这个称为写-写冲突,
2 读“脏”数据,是指事务T2读取了T1更新后的某一数据,其后T1由于某种原因被撤销,T1更新后的数据恢复原值,此时T2读到的数据与数据库中的数据不一致。读“脏”数据是由于一个事务读另一个更新事务尚未提交的数据引起的,是读写冲突,
3 读值不可重现,是值T1两次读取同一数据,在两次读值期间,事务T2执行更新操作,使得T1无法重现前一次的读取结果,也是读写冲突。
封锁:用封锁实现并发控制就是在操作前先对操作对象加锁,以使其他事务就不能对该对象进行操作。
基本锁类型:1 排他锁(exclusive,简称X锁),2共享锁(share locks简称S锁)
1 排他锁:又称写锁,可用于读操作,也可用于写操作,如果事务T对某个数据对象R加上X锁,那么只允许T读取和修改R,在T解除对数据R的封锁之前,不允许其他事务再对该数据对象添加任何类型的锁,也就是说这种锁具有排他性
2 共享锁:如果事务T对R加上S锁后,则事务T可以读R但是不能修改R,其他事务可以在对R加R锁,但是R上的所有S锁解除之前不允许其他事务对R加X锁。
还有其他的一些锁和使用原理是根据事务的并发性和封锁粒度改进的多粒度封锁,这里有篇文章介绍得比较多:
http://blog.csdn.net/august_sun/article/details/6227762,主要还是理解锁的机制原理