首先,先介绍用命令方式创建、删除和修改关系表,
(1)、创建表
基本格式:create table 表名
(
列名 数据类型 列级完整性约束,列名 数据类型 列级完整性约束(如果有多个列,注意要用 英文式的逗号隔开)
,表级完整性约束(表级完整性约束和列级完整性约束之间也要用逗号分隔开)
)
列级完整性约束有: | |
not null | 限制列取值为空 |
default | 指定列的默认值 |
unique | 定义列取值不能重复 |
check | 定义列的取值范围(check是定义的多列之间的取值约束,只能在表级完整性约束)处定义 |
primary key | 定义主码约束 |
foreign key | 定义外码约束 |
表级完整性约束: | |
unique | 定义列取值不能重复 |
check | 定义列的取值范围(check是定义的多列之间的取值约束,只能在表级完整性约束)处定义 |
primary key | 定义主码约束 |
foreign key | 定义外码约束 |
知道呢有哪些约束,那么,怎么定义完整性约束呢?他们的格式是什么呢?
主码约束:primary key (列名,列名,列名......)
外码约束:foreign key (列名) references 外表名 (外表列名)
unique约束:列名 数据类型 unique (列名,列名......)
default约束:列名 default 默认值
check约束:check 逻辑表达式(逻辑表达式中不能包含来自多个表的列)
(2)、修改表:
基本格式: alter table 表名
alter column 列名 新的数据类型 (修改列的定义)
add 列名 数据类型 约束 (增加新的列)
drop column 列名 (删除列)
add 约束定义 (添加约束)
drop 约束名 (删除约束)
注意:不同的DBMS的alter table语句格式都不同,在这里以SQL2014为例
(3)、删除表:
基本格式: drop table 表名
注意:如果被删除的表中有其他表对他的外码引用约束,则必须先删除外码所在的表,然后再删除被引 用码所在的表
实例说明:(1)创建3张表,学生表(student)、课程表(course)和学生选课表(sc)
学生表(student)
列名 | 含义 | 数据类型 | 约束 |
Sno | 学号 | char(11) | 主码 |
Sname | 姓名 | nchar(4) | 非空 |
Snumber | ×××号 | char(18) | 取值不重 |
Ssex | 性别 | nchar(1) | 默认值为'男' |
Sage | 年龄 | tinyint | 取值范围为15—45 |
Sdept | 所在系 | nvarchar(20) |
创建student表代码:
use student
create table student
(
Sno char(11) primary key,
Sname nchar(4) not null,
Snumber char(18) unique,
Ssex nchar(1) default '男',
Sage tinyint check(sage >= 15 and sage <= 45),
Sdept nvarchar(20)
)
课程表(course)
列名 | 含义 | 数据类型 | 约束 |
Cno | 课程号 | char(6) | 主码 |
Cname | 课程名 | nvarchar(20) | 非空 |
Credit | 学分 | numeric(3,1) | 大于0 |
Semester | 学期 | tinyint |
创建course表代码:
use student
create table course
(
Cno char(6) primary key,
Cname nvarchar(20) not null,
Credit numeric(3,1) check(Credit > 0),
Semeter tinyint
)
选课表(sc)
列名 | 含义 | 数据类型 | 约束 |
Sno | 学号 | char(11) | 主码,引用student的外码 |
Cno | 课程号 | char(6) | 主码,引用course的外码 |
Grade | 成绩 | tinyint |
创建sc表代码:
use student
create table sc
(
Sno char(11) not null,
Cno char(6) not null,
Grade tinyint,
primary key (sno,cno),
foreign key (sno) references student(sno),
foreign key (cno) references course(cno)
)
(2)为sc表添加‘修课类别’(type)列,允许为空,代码如下:
alter table sc
add type nchar(1) null
(3)为sc表添加‘修课类别’(type)列修改他的数据类型为nchar(2),代码如下:
alter table sc
alter column type nchar(2)
(4)为sc表添加‘修课类别’(type)列添加取值范围为{必修,重修,选修}的约束,代码如下:
alter table sc
add check(type in ('必修','重修','选修'))
(5)删除type列,代码如下:
alter table sc
drop column type
转载于:https://blog.51cto.com/growing2015/1878777