约束与范式
一、约束
1.主键约束
-
单列主键
# 在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键。 # 在定义字段的同时指定主键,语法格式如下: create table 表名( ... <字段名> <数据类型> primary key ... ) # 在定义字段之后再指定主键,语法格式如下: create table 表名( ... [constraint <约束名>] primary key [字段名] );
-
联合主键
# 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。 create table 表名( ... primary key (字段1,字段2,…,字段n) );
-
修改表结构添加主键
alter table <表名> add primary key(字段列表);
-
删除主键
alter table <数据表名> drop primary key;
2.非空约束
-
创建表时定义非空约束
create table student ( id int, name varchar(20) NOT NULL, # 指定非空约束 address varchar(20) NOT NULL # 指定非空约束 );
-
添加非空约束
create table student ( id int, name varchar(20), # 指定非空约束 address varchar(20) # 指定非空约束 ); alter table student modify name varchar(20) not null; alter table student modify address varchar(20) not null;
-
删除非空约束
# alter table 表名 modify 字段 类型 alter table student modify name varchar(20); alter table student modify address varchar(20);
3.自增长约束
-
设置自增长约束
# 字段名 数据类型 auto_increment create table student( id int primary key auto_increment, name varchar(20) );
4.唯一约束
-
创建表时设置
create table student ( id int, name varchar(20), phone_number varchar(20) unique # 指定唯一约束 );
-
通过ALTER修改指定
create table student ( id int, name varchar(20), phone_number varchar(20) # 指定唯一约束 ); alter table student add constraint unique_ph unique(phone_number);
-
删除唯一约束
# alter table <表名> drop index <唯一约束名>; alter table student drop index unique_ph;
5.外键约束
-
创建表时设置
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <主表名> 主键列1 [,主键列2,…] CREATE TABLE SC (Sno INT, Cno CHAR(2), Grade TINYINT, PRIMARY KEY(Sno,Cno), FOREIGN KEY(Sno) REFERENCES student(Sno), FOREIGN KEY(Cno) REFERENCES course(Cno) );
-
使用ALTER添加外键
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
-
删除外键约束
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
二、范式
1.第一范式
- 确保每一列的原子性,即不可再分
2.第二范式
- 确保每行的唯一性
- 要求实体的属性完全依赖于主键,而不是只依赖部分关键字
3.第三范式
- 确保每列都和主键列直接相关,而不是间接相关
- 确保数据表除了外键以外,其他非主键属性不得重复出现在第二张表上