1. 当begin tran语句到达数据库时,sql server分析出这是事务的开始,SQL server找到下一个可用的内存日志页面,并给新事务分配一个事务ID
2. 接着运行插入语句,新的行被记录到事务日志中,数据页面在内存中进行修改,若所需页面不在内存中,则从磁盘调出。
3. update语句以类似的方式运行。
4. 当sql server收到commit tran时,日志页面被写到数据库的日志设备上,这样才能保证日志页面可被恢复。由于日志变化写入了硬盘,它保证事务是可恢复的,即使掉电了或在数据页写入磁盘时数据库崩溃了,也能进行事务恢复。
5. 问题:系统何时将数据页写入磁盘呢:
日志页面是在commit tran时写入磁盘的,那么何时将数据页面写入磁盘呢?在处理检查点时。检查点的概念:是sql server将数据页面从内存拷贝到磁盘时的内部处理点。
检查点帮助确保恢复已提交事务而不会花费额外的时间。当检查点出现时,将写入一个日志项以指示所有修改了的页面已写入磁盘。
琐的概念:
锁是在多用户环境下对资源访问的一种限制机制。当对一个数据源加锁后,此数据源就有了一定的访问限制,我们就称对此数据源进行了琐定。在SQL Server中可以对以下的对象进行琐定:
l 数据行:数据页的单行数据。
l 索引行:索引页中的单行数据既索引的键值。
l 页:页是SQL Server存取数据的基本单位其大小为8KB
l 盘区:一个盘区由8个连续的页组成。
l 表
l 数据库
锁的类别:
在SQL Server中,从数据库系统的角度来看,锁分为以下三种类型:
l 独占琐:独占琐琐定的资源只允许进行琐定操作的程序或事务使用,其它任何对它的操作君不允许被接受。执行数据的更新指令,即INSERT、UPDATE或DELETE命令时,SQL Server会自动使用独占琐,独占琐一直到事务结束才能被释放。
l 共享琐:共享琐琐定的资源可以被其他用户读取,但其他用户不能修改它。在SELECT命令执行时,SQL Server通常会对对象进行共享琐琐定,通常加共享琐的数据页被读取完毕后,共享琐就会立即被释放。
l 更新琐:更新琐是为了防止死琐而设立的。当SQL Server准备更新数据时,它首先对数据对象做更新琐琐定,这样数据将不能被修改,但可以读取。等到SQL Server确定要进行更新数据操作时,它会自动将更新琐换为排它锁。但当对象上有其它琐存在时,无法对其做更新琐锁定。
主键最多有16个列组成
约束:
l 主键约束 分为:字段级约束和表级约束
字段约束:为某个字段设置约束。在设置字段级约束时,只需将创建主键约束的语句添加到该字段的定义子句后面。
表级约束:指将包含多个字段的字段组合设置为主键
l 唯一性约束:在一个表中只能设置一个主键约束,如何限制非主关键字输入值的唯一性呢?
l 核查约束
唯一性约束与主键约束的区别:
l 在一个表中只能定义一个主键约束,但可以定义多个唯一性约束。
l 允许空值的字段上不能定义主键约束,但可以定义唯一性约束。
例:
Create table project
(
Project_code int constraint pk_pno primary key,
Project_name char(20),
Project_manager char(20),
Constraint un_pm unique(project_name,project_manager)
)
l 外键约束:外关键字约束定义了表之间的关系。当一个表的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它是和哪个表中那些列相关联。这样,当在定义主关键字约束的表中更新列值时,其它表中有与之相关联的外关键字约束的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向喊有外关键字的表中插入数据时,如果与之相关联的表的列中没有与插入的外关键字列值相同的值时,系统会拒绝插入数据。(操作:创建关系图中设置)
l NULL DEFAULT约束