SQL Server学习进程(六)--数据完整性(规则、默认、完整性约束)

时间:2024-05-18 22:23:49

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外键约束

外键约束在两个表之间建立连接,可以是一列或者多列。

一个表可以有一个或多个外键。

外键对应参照完整性,一个表的外键可以为空值,若不为空,外键值必须等于另一个表中主键的某个值。

外键字段必须对应的是另一个表中的主键。

主表:主键所在的表为主表

从表:外键所在的表为从表

目标表-》键-》(右击)-》新建外键

SQL Server学习进程(六)--数据完整性(规则、默认、完整性约束)

点击表和列规范-》选择对应的字段-》确定

SQL Server学习进程(六)--数据完整性(规则、默认、完整性约束)

--创建外键
--与主键类似
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。

目标数据表-》(右击)设计-》右击

SQL Server学习进程(六)--数据完整性(规则、默认、完整性约束)

右击得到如下

SQL Server学习进程(六)--数据完整性(规则、默认、完整性约束)

其中“关系”可以设置外键,“索引/键”可以设置唯一性约束

SQL Server学习进程(六)--数据完整性(规则、默认、完整性约束)

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约束

目标数据表-》约束-》新建约束-》标记处写下约束条件

SQL Server学习进程(六)--数据完整性(规则、默认、完整性约束)

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)

)

目标数据表->设计-》

SQL Server学习进程(六)--数据完整性(规则、默认、完整性约束)

4.6 NOT NULL 约束

经常使用,不再重复。