数据完整性(约束操作)

数据完整性(约束操作)

  1. 实体完整性:主键约束、唯一键约束
  2. 域完整性:默认值约束、检查约束、非空
  3. 参照(引用)完整性:外键约束

创建数据表时定义约束

语法

create table 数据表名
(
列名1 数据类型1 [constraint 约束名1][约束1]
列名2 数据类型2 [constraint 约束名2][约束2]
……
列名n 数据类型n [constraint 约束名n][约束n][,]
[constraint 约束名n+1][约束n+1][,] --表级约束
……
)

(1)列级约束:在表的列名之后直接定义的约束,只约束这一列的数据
(2)表级约束:在表定义的所有列之后,单独一行代码定义的约束,这个约束可以只约束一个列,
    也可以约束多个列。同时约束多个列的必须是表级约束。
(3)注意:constraint 约束名:要求在一个数据库里面,约束名称必须唯一:如果不指定,则系统默认指定。
(4)用表级约束添加主键时,声明列时要提前声明非空 (not null),不然要报错

# 命名格式通常可以采用:表名_约束名_序号

代码

例:定义学生表,学号为主键,性别默认为女,只能取值男或女,电话号码唯一。
create table tbStudent
(
sno char(10) constraint stu_pk_01 primary key,
sname varchar(8) not null,
sex char(2) default('女') check(sex='男' or sex='女'),
birthday datetime,
class varchar(20),
telephone char(20) unique
)
go

向学生表里添加值
insert into tbStudent(sno,sname,sex,birthday,class,telephone)
values('1000000001','张三丰','男','1992-1-1','计应1031','10001')
insert into tbStudent(sno,sname,sex,birthday,class,telephone)
values('1000000003','公孙止','田','1992-1-1','计应1031','10003')--出错:sex:田:不符合检查约束
insert into tbStudent(sno,sname,sex,birthday,class,telephone)
values('1000000004','杨过','男','1989-11-1','计应1031','10002')--出错:telephone:10002:不符合唯一约束
go

例:定义学生表,学号为主键,性别默认为女,只能取值男或女,电话号码唯一。
create table tbStudent
(
sno char(10) not null,--非空很重要
sname varchar(8) not null,
sex char(2) default('女') ,
birthday datetime,
class varchar(20),
telephone char(20),
--表级约束形式定义相关约束
constraint stu_pk_01 primary key(sno),--主键约束:
check(sex='男' or sex='女'),
constraint stu_uq_01 unique(telephone)
)
go

修改数据表定义约束

语法

alter table 数据表
add [constraint 约束名] 约束(列名1,列名2),
    [constraint 约束名] 约束(列名1,列名2)

代码

例:在课程表上课程编号上定义主键约束
alter table tbcourse
add constraint course_pk_01 primary key(cno)
go

你可能感兴趣的:(数据库)