数据库(笔记)——定义数据表约束和修改数据表
程序员文章站
2022-05-30 18:18:05
...
在这里只使用SQL语句来进行
数据表约束的定义
约束的类型
- NULL/NOT NULL约束
分别表示可以为空和不可以为空,语句如下
Create Table Stu
(
stu_no nchar(11) Constraint s_con NOT NULL
)
[Constraint + 约束名] + 约束类型,其中约束名自己定义,中括号部分可以省略(也就是可以不对约束进行命名,系统会自定义)
- UNIQUE约束
UNIQUE唯一,用于表示一列或者多个列的组合上取值唯一,不能用相同的值出现
注意:唯一约束下,可以有空值存在,但最多只能有一个
Create Table Stu
( -- 单个属性列的约束
stu_no nchar(11) Constraint s_uni UNIQUE
)
Create Table Stu
( --多个属性列的约束
stu_na nchar(8),
stu_sex nchar(2),
Constraint stu_uni UNIQUE(stu_na, stu_sex)
)
这是多个属性列一起,添加的唯一约束,意思是不能存在姓名、学号都相同的情况
- PRIMARY KEY约束
主键约束,用于规定基本表的主键的,如下
Create Table Stu
(
stu_no nchar(11) PRIMARY KEY
)
UNIQUE与PRIMARY KEY不能共存
一个基本表中只能有一个主键约束,当存在多个属性列为主键时,需要通过表约束定义
- 表约束实际上就是多个属性列组合在一定定义的约束,就如前面的Constraint stu_uni UNIQUE(stu_na, stu_sex)
那么多个属性列作为主键的定义如下
Create Table SC --选课表
(
stu_no nchar(11) NOT NULL, --学号
c_no nchar(5) NOT NULL, --课程号
Score int, --成绩
Constraint sc_prim PRIMARY KEY(stu_no,c_no)
)
- FOREIGN KEY约束
外键约束,定义外键,如下
(在此之前先要知道,stu_no和c_no分别是学生表Stu,课程表C的主键,
而这两个一起又是SC选课表的主键)
Create Table SC --选课表
(
stu_no nchar(11) NOT NULL Constraint stu_fore FOREIGN KEY Stu(stu_no) --学号
c_no nchar(5) NOT NULL Constraint stu_fore FOREIGN KEY C(c_no) --课程号
Score int, --成绩
Constraint sc_prim PRIMARY KEY(stu_no,c_no)
)
添加外键的语法:FOREIGN KEY 源表名(列名)
- CHECK约束
该约束用于检测,录入\更新数据库的数据是否符合这一约束的规定,如下
Create Table Stu
(
stu_sex nchar(2) Default '男' Constraint stu_she Check(stu_sex = '男' or stu_sex = '女')
)
它表示,性别只能取男或女
//Defaule '男'表示给stu_sex设定的默认值为男,当没有填写这项数据,就会默认为男
//Default不是约束
修改数据表
- 添加属性列
Alter Table Stu
Add
stu_age int
添加新的属性的语法与创建时几乎相同,只是外部变为了Alter(修改的意思)
新添加的属性列需要注意
- 新加入的属性列将全部填为空值NULL,因此不能对其定义NOT NULL和UNIQUE
- 添加约束
Alter Table Stu
Add
Constraint stu_ch Check(stu_age > 0 and stu_age < 100)
//对之前新加的属性列添加约束
- 修改字符长度
原则是只能改长,不能改短
Alter Table Stu
Alter Column
stu_na nchar(12)
//之前我对stu_na定义的长度都为8,这里改为了12
- 修改约束
- 可以直接修改NULL和NOT NULL,但存在NULL的属性列不能改为NOT NULL
- 其它约束要进行修改,必须先删除,然后在添加
//删除约束
Alter Table Stu
Drop Constraint stu_ch //Drop Constraint 约束名
//这里删除了前面给stu_age定义约束
//因此能够删除的约束,需要知道对应的约束名
总结
定义约束是比较简单的,也不容易出错
而在添加,修改这一块就很容易出错,很容易忘记一些规定,在修改的时候就报错
上一篇: 数据库Ⅱ——数据表创建