1.1 理论背景
SQL即Structured Query Language,它是为查询和管理关系型数据库管理系统中的数据而专门设计的一种标准语言。SQL有几种类型不同的语句,包括数据定义语言(DDL, Data Definition Language),数据处理语言(DML, Data Manipulation Language)以及数据控制语言(DCL, Data Control Language)。
DDL用于处理数据对象的定义,包括的语句有Create, Alter以及Drop。
DML用于查询和修改数据,包括的语句有SELECT, INSERT, UPDATE, DELETE以及MERGE。
DCL用于处理权限管理,包括GRANT和REVOKE。
Codd提出的数据库三个范式:
1NF:行必须是唯一的,属性应该是原子的
2NF:数据必须满足第一范式,每个非候选键属性都必须完全依赖于整个候选键
3NF:数据必须满足第二范式,所有非候选键属性必须非传递依赖于候选键。(所有非候选键都必须相互独立)
1.2 SQL Server体系结构
master数据库:保存SQL Server实例范围内的元数据信息,服务器配置,实例中所有数据库的信息,以及初始化的信息。
Resource数据库:用于保存所有系统对象。
model数据库:是新数据库的模板
tempdb数据库:是SQL Server保存临时数据的地方
msdb数据库:是称为SQL Server Agent的一种服务保存其数据的地方
.mdf代表Master Data File,主数据文件
.ldf代表Log Data File,日志数据文件
.ndf代表Not Master Data File,非主要数据文件
1.3 创建表和定义数据完整性
DB_id函数接受一个数据库名字作为输入,返回它的内部数据库ID
if DB_ID('XufeiDB') is null
create database XufeiDB
当用户没有将默认架构显式关联到其他架构时,就会将这个dbo作为默认架构。
主键约束:对应一个唯一索引。每个表只能定义一个主键约束。不允许在允许null值的列上定义主键约束。
唯一约束:同一个表中可以定义多个唯一约束,唯一约束也不只限于定义于not null的列上。Sql Server允许在唯一约束列中有一列可以为null值。
外键约束:为了将外键列允许的值域限制为被引用列中现有的值。即使在被引用的候选键列不存在null值,在外键列中也允许null值。
可以定义级联操作的外键,可以在外键定义中将On Delete和On Update选项定义为CASCADE, SET DEFAULT, SET NULL。
CASCADE:操作被级联到引用表中相关行
SET DEFAULT:设置为默认值
SET NULL:设置为NULL
Check约束:当增加CHECK和FOREIGN KEY约束时,可以指定一个WITH NOCHECK选项,告诉RDBMS不必对现有的数据进行约束检查。
默认约束