数据库---数据完整性
数据库完整性
一、完整性约束条件的作用对象
1、完整性检查是围绕完整性约束条件进行的,因此,完整性约束条件是完整性控制机制的核心。完整性约束条件的作用对象可以是表、元组和列。
2、列级约束:列级约束主要是对列的类型、取值范围、精度等的约束,具体包括:
- 对数据类型的约束: 包括数据类型、长度、精度等。
- 对数据格式的约束: 如:规定学号的前两位表示学生的入学年份,第三位表示系的编号,第四位表示专业编号,第五位代表班的编号等等。
- 对取值范围的约束: 如:学生的成绩取值范围为0~100。
- 对空值的约束。
3、元组约束:元组的约束是元组中各个字段之间的联系的约束
如:开始日期小于结束日期; 职工的最低工资不能低于规定的最低保障金。
4、关系约束:
如:学号的取值不能重复也不能取空值;学生修课表中的学号的取值受学生表中的学号取值的约束
二、实现数据完整性
1、声明完整性
- 在表定义时声明
- 使用约束、缺省值(DEFAULT)等
- 由SQL Server自动加以保证
2、过程完整性
- 在客户端或服务器端用编程语言或工具实现
- 在Server端用触发器(trigger)来实现
三、实现约束
1、PRIMARY KEY 约束:
1)保证实体完整性
2)每个表有且只有一个PRIMARY KEY 约束
3)格式:
ALTER TABLE 表名
ADD [ CONSTAINT 约束名 ]
PRIMARY KEY ( 列名)
4)例:对雇员表和工作表分别添加主码约束。
ALTER TABLE 雇员表
ADD CONSTRAINT PK_EMP
PRIMARY KEY (雇员编号)
ALTER TABLE 工作表
ADD CONSTRAINT PK_JOB
PRIMARY KEY (工作编号)
2、UNIQUE 约束
1)确保在非主键列中不输入重复值。
2)应用在客观具有唯一性质的列上,如身份证号、社会保险号等。
3)格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
UNIQUE(列名)
4)例:为雇员表的“电话号码”列添加UNIQUE约束。
ALTER TABLE 雇员表
ADD CONSTRAINTUK_SID
UNIQUE (电话号码)
3、FOREIGN KEY约束
1)用于建立和加强两个表数据之间的连接的一列或多列
2)格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
FOREIGN KEY (列名)
REFERENCES 引用表名 (列名)
3)例:为雇员表的工作编号添加外码引用约束,此列引用工作表的工作编号列。
ALTER TABLE 雇员
ADD CONSTRAINT FK_job_id
FOREIGN KEY (工作编号)
REFERENCES 工作表 (工作编号)
4、DEFAULT约束
1)一个Default只能约束一列。
2)格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
DEFAULT 默认值 FOR 列名
3)例:定义雇员表的工资的默认值为1000。
ALTER TABLE 雇员
ADD CONSTRAINT DF_SALARY
DEFAULT 1000 FOR 工资
注:当向表中插入数据时,如果没有为定义了 DEFAULT的列提供值,则此列使用默认值。
5、CHECK约束
1)通过限制输入到列中的值来强制域的完整性。
2)可定义同表多列之间的约束关系
3)格式:
ALTER TABLE 表名
ADD [ CONSTRAINT 约束名 ]
CHECK (逻辑表达式)
4)例:①在雇员表中,添加限制雇员的工资必须大于等于500的约束。
ALTER TABLE 雇员
ADD CONSTRAINT CHK_Salary
CHECK ( 工资 >= 500 )
②添加限制工资表的最低工资小于等于最高工资的约束。
ALTER TABLE 工作
ADD CONSTRAINT CHK_Job_Salary
CHECK ( 最低工资 <= 最高工资 )
6、综合例:
四、数据库的创建
1、语法结构:
Create database 数据库名称
on primary ( name=数据文件逻辑名,
filename=数据文件物理名,
size=初始大小,
maxsize=最大,
filegrowth=增长率)
log on(日志文件的性质…..);
2、例:创建一个数据库
Create database mydb
on primary ( name=mydb1,
filename=‘c:\db1’,
size=10mb, maxsize=100mb, filegrowth=10% )
log on(…..);
五、删除数据库
1、语法格式:
Drop database 数据库名称;
2、例如:
Drop database mydb;