原创作品,出自 “深蓝的blog” 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/47281071
051.9 操作数据
051.9.5 控制事务
一、数据库事务
1、事务的概念?
事务是关系数据库范例的一部分,是由一个或者多个DML语句组成,后面紧跟ROLLBACK或者COMMIT命令;
2、事务的特性?
ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
3、事务原子性的原则?
一个事务的所有部分必须都完成,或都不完成。
4、事务一致性的原则?
规定查询的结果必须与数据库在查询开始的时候状态一致。
5、事务隔离性的原则?
对于其它部分来说,未完成的(未提交的)事务必须不可见。
6、事务持久性的原则?
规定一旦某个事务完成,数据库就不可能丢失这个事务。
二、执行SQL语句
1、执行SELECT语句
(1)、服务器进程,是将数据块从数据文件读取至数据缓存区的进程;
(2)、DDWn进程,是将数据块从数据库缓存区写入数据文件的进程;
(3)、SELECT执行过程
步骤<1>:用户进程发出select指令,传输给服务器进程,此时服务器进程将从数据库缓存区中查询是否有所需的select数据,如果
有则则步骤<4>把数据读取到服务器进程,结果集返回到用户进程,返回客户;
步骤<2>:如果查询后数据库缓存区中没有有用的数据,则进入步骤<2>,会到数据文件中查找所需的块;
步骤<3>:步骤<2>结束后,会经历步骤<3>把从数据文件中获取到的数据块复制到数据库缓冲区中;
步骤<4>:步骤<3>后,会经历步骤<4>将数据传输到服务器进程中;
步骤<5>:该步骤会把接收到数据,即查询结果,返回给用户进程;
2、执行UPDATE语句
步骤<1>:从缓存拿数据:客户端发出命令语句后,会在数据缓冲区中查找所需的数据块是否存在,如果不存在DML操作会完成将所
需的数据块从数据文件复制至数据块缓冲区。区别于select语句,DML语句还需要某个undo段的一个空数据块;
步骤<2>:放置锁:会在所有记录以及相关索引键上放置锁;
步骤<3>:生成redo:此时服务器进程在日志缓冲区中写入即将应用于指定数据块的变更向量。(redo要在后面应用于“表块”的变
更和“撤销块”的变更)。如果更新某列,该列的rowid和新值以及旧值都会被写入日志缓冲区。如果这列是某索引键的