常见约束
含义:一种限制,限制表中的数据,保证表中的数据的准确性和可靠性
create table 表名(
字段名 字段类型 约束
);
分类:六大约束
- NOT NULL -- 非空约束,保证该字段的值不可为空
- DEFAULT -- 默认约束,保证该字段存在默认值
- PRIMARY KEY -- 主键约束,保证该字段的值具有唯一性,并且非空
- UNIQUE -- 唯一约束,保证该字段的值具有唯一性,但可为空
- CHECK -- 检查约束,【MYSQL中不支持】
- FOREIGN KEY -- 外键约束,限制两个表的关系,保证该字段的值来自主表的关联列的值,从表添加外键约束,用于引用主表中某列的值
注:约束添加在创建表和修改表时
约束添加时的分类:
-
列级约束 六大约束语法上支持,但外键约束无效果
-
表级约束 除了非空、默认、其他都支持
create table 表名( 字段名 字段类型 列级约束, 表级约束 );
创建表时添加约束
1、添加列级约束
use 库名
create table 表名(
列名 int primary key not null,
col2 varchar(20) not null,
sex char(1) check(sex='男' or sex='女')
)
2、添加表级约束
【constraint 约束名】(可省略内容) 约束类型(列名)
use 库名
create table 表名(
列名 int,
col2 varchar(20),
sex char(1),
constraint pk primary key(列名),
constraint uq unique(列名),
constraint fk foreign key(列名) references z主表
)
通用写法
create table 表名(
列级约束
表级约束:外键
);
primary key 和 unique:
- 两者都可以限制唯一性
- 主键不可为空,唯一可以为空
- 一个表最多有一个主键,唯一性约束有多个
- 两者都允许组合
foreign key
- 在从表设置外键关系
- 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
- 主表中的关联列必须为一个key(一般为主键或者唯一键)
- 插入数据时,先插入主表的数据后再插入从表,删除反之
二、修改表时添加约束
-
添加非空约束 alter table 表名 modify column 列名 int NOT NULL;
-
添加默认约束 alter table 表名 modify column 列名 int default 18;
-
添加主键约束
- alter table 表名 modify column 列名 int primary key;
- alter table 表名 add primary key(列名);
- 添加唯一键
- alter table 表名 modify column 列名 int UNIQUE;
- alter table 表名 add UNIQUE(列名);
- 添加外键 alter table 表名 add foreign key(列名) reference 主表(列名);
三、修改表时删除约束
- alter table 表名 modify column 列名 类型;
- alter table 表名 drop primary key;
-
删除唯一键 alter table 表名 drop index 列名;