1.概述
数据的完整性是指数据中数据的正确性和相容性。
与数据完整性相关的三个概念:规则、默认和完整性约束。
2.规则 (RULE)
--创建规则
--create rule rule_name
--AS conditon_expression
create rule rule_score
as @score>=0 and @score<=100
--sp_bindrule 'rule','object_name' [,'futureonly_flag']
--rule为create创建的rule,object_name表示要绑定规则的表或列或别名数据类型
--futureonly_flag:表示仅当将规则绑定到别名数据类型时才能使用
GO
exec sp_bindrule 'rule_score','students.成绩'
insert into students values (1,'Tim','Boy','five',100)
--sp_unbindrule 'object_name'
exec sp_unbindrule 'students.成绩'
drop rule rule_score --删除规则
3.默认(DEFAULT)
/*
默认值在insert种使用,即在update、delete语句中将被忽略。
如果在insert语句中提供了任意值,那么就不使用默认值。
如果没有提供值,将总是默认值。
DEFAULT约束,可以有如下操作
在表定于时作为表的一部分同时被创建
可以添加到已创建的表中。
可以删除default定义。
*/
--create default <default_name>
--as <constant_expression>
create default default_sex
as '男'
--sp_bindefault 'default','object_name' [,'futureonly_flag']
go
exec sp_bindefault 'default_sex','students.性别'
insert into students(学号,姓名,班级,成绩) values(3,'David','7',88)
go
exec sp_unbindefault 'students.性别'
drop default default_sex --只有当去除默认值与表之间的关联,才能删除默认值
4.完整性约束
4.1主键约束
--不是每一个表都需要一个主键
--建表时创建主键2种方法
create table fruits
(
id int primary key, --设置主键
name varchar(10) not null,
price money not null,
operator varchar(10) null
)
create table fruits
(
id int not null, --设置主键
name varchar(10) not null,
price money not null,
operator varchar(10) null
constraint 水果编号 --设置主键,同时设置了约束的名字’水果编号‘
primary key (id) --
)
--在未设置主键的表中添加主键
/*
alter table table_name
add constraint 约束名称
primary key [clustered | nonclustered] [列名][,...n]
*/
alter table fruits
add constraint 水果编号
primary key (id,name)
--删除主键
alter table fruits
drop constraint 水果编号
4.2外键约束
外键约束在两个表之间建立连接,可以是一列或者多列。
一个表可以有一个或多个外键。
外键对应参照完整性,一个表的外键可以为空值,若不为空,外键值必须等于另一个表中主键的某个值。
外键字段必须对应的是另一个表中的主键。
主表:主键所在的表为主表
从表:外键所在的表为从表
目标表-》键-》(右击)-》新建外键
点击表和列规范-》选择对应的字段-》确定
--创建外键
--与主键类似
create table animalsS
(
ID int not null, --设置主键
name varchar(10) not null,
age int not null,
Food int null,
constraint Food_ID --设置主键,同时设置了约束的名字’水果编号‘
foreign key (Food) references fruits(id) --
)
--添加外键
alter table students
add constraint 学号_id
foreign key(学号) references fruits(id)
--删除外键
alter table students
drop constraint 学号_id
4.3唯一性约束
UNIQUE约束指定列数据不可重复。
UNIQUE约束可以同时指定一列或多列,列中数据允许为空,但只能出现一次NULL。
目标数据表-》(右击)设计-》右击
右击得到如下
其中“关系”可以设置外键,“索引/键”可以设置唯一性约束
T-SQL语句实现唯一性约束
/* 创建UNIQUE约束
create table table_name
(
name type [not null | null]
[,...n]
CONSTRAINT constraint_name
UNIQUE(name1,name2,...)
)
*/
CREATE TABLE animalss
(
ID int primary key,
NAME varchar(20) not null,
Age int UNIQUE
)
--增加唯一键
ALTER TABLE animalss
ADD CONSTRAINT 年龄
UNIQUE(Age)
--删除唯一键
ALTER TABLE animalss
DROP CONSTRAINT 年龄
4.4CHECK约束
一个字段可以定义多个CHECK约束
目标数据表-》约束-》新建约束-》标记处写下约束条件
CREATE TABLE animalss
(
ID int primary key,
NAME varchar(20) not null,
Age int UNIQUE
CHECK(Age >18 and Age < 60)
)
4.5DEFAULT约束
/* 创建DEFAULT约束
create table table_name
(
name type [not null | null] DEFAULT(expression)//例如default('男')
[,...n]
)
*/
CREATE TABLE animalss
(
ID int primary key,
NAME varchar(20) not null,
Sex varchar(10) default('Boy'),
Age int UNIQUE
CHECK(Age >18 and Age < 60)
)
目标数据表->设计-》
4.6 NOT NULL 约束
经常使用,不再重复。