一、非空约束(只能在列级设置,不能在表级设置)
1、在创建表时设置非空约束
CREATE TABLE table_name(
column_name datatype NOT NULL,……
);
2、在修改表时添加非空约束
ALTER TABLE table_name
MODIFY column_name datatype NOT NULL;
3、在修改表时去除非空约束
ALTER TABLE table_name
MODIFY column_name datatype NULL;
二、主键约束
作用:确保表当中每一行数据的唯一性 非空 唯一
一张表只能设计一个主键约束
主键约束可以由多个字段构成(联合主键或复合主键)
1、在创建表时设置主键约束
在列级设置主键约束
CREATE TABLE table_name(
column_name datatype PRIMARY KEY,……
);
在表级设置主键约束
CONSTRAINT constraint_name
PRIMARY KEY(column_name1,……)
使用desc user_constraints可以查看约束的名字等信息
2、在修改表时添加主键约束
ADD CONSTRAINT constraint_name
PRIMARY KEY(column_name1,……);
3、更改约束的名称
RENAME CONSTRAINT old_name TO new_name;
4、删除主键约束
禁用主键约束:
DISABLE|ENABLE CONSTRAINT constraint_name;
彻底删除主键约束:
DROP CONSTRAINT constraint_name;
DROP PRIMARY KEY[CASCADE]
三、外键约束(涉及两个表之间的关系)
1、在创建表时设置外键约束
- 设置外键约束时,主表的字段必须是主键
- 主从表中相应的字段必须是同一个数据类型
- 从表中外键字段的值必须来自主表中的相应字段的值,或者为null值
CREATE TABLE table1
(column_name datatype REFERENCES
table2(column_name),……);
table1位从表,table2位主表
在表级设置外键约束
CONSTRAINT constraint_name FOREIGN
KEY(column_name)REFERENCES
table_name(column_name)[ON DELETE CASCADE];
2、在修改表时添加外键约束
ADD CONSTRAINT constraint_name FOREIGN
KEY(column_name) REFERENCES
table_name(column_name)[ON DELETE CASCADE];
3、删除外键约束
禁用外键约束:
DISABLE|ENABLE CONSTRAINT constraint_name;
彻底删除外键约束:
DROP CONSTRAINT constraint_name;
四、唯一约束
唯一约束和主键约束的区别:
- 主键字段值必须是非空的,唯一约束允许有一个空值
- 主键在每张表中只能有一个,唯一约束在每张表中可以有多个
- 唯一约束要求每个字段不能有重复值,可以有空值,但是空值只能有一个
1、在创建表时设置唯一约束
在列级设置唯一约束
CREATE TABLE table_name
(column_name datatype QUNIQUE,……);
在表级设置唯一约束
CONSTRAINT constraint_name
UNIQUE(column_name);
2、在修改表时添加唯一约束
ADD CONSTRAINT constraint_name
UNIQUE(column_name);
3、删除唯一约束
DISABLE|ENABLE CONSTRAINT constraint_name;
禁用唯一约束
彻底删除唯一约束
DROP CONSTRAINT constraint_name;
五、检查约束
1、在创建表时设置检查约束
在列级设置检查约束:
CREATE TABLE table_name(
column_name datatype CHECK(expressions),……);
表级设置检查约束:
CONSTRAINT constraint_name CHECK(expressions);
2、在修改表时添加检查约束
ADD CONSTRAINT constraint_name
CHECK(expressions);
3、删除检查约束
禁用检查约束:
DISABLE|ENABLE CONSTRAINT constraint_name;
彻底删除检查约束:
DROP CONSTRAINT constraint_name;