六大约束
- NOT NULL:非空
- DEFAULT:默认
- PRIMARY KEY:主键,值唯一且非空
- UNIQUE:唯一,可以为空
- CHECK:检查,mysql不支持
- FOREIGN KEY:外键,限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值
分类
添加约束的时机:创建表时,修改表时
约束的添加分类:列级约束,表级约束
- 列级约束——除了外键都支持,不可以起约束名
- 表级约束——除了非空、默认都支持,可以起约束名,但是对主键无效
create table 表名(
字段名 字段类型 列级约束,
字段名 字段类型 ,
表级约束
)
创建表时添加约束
create table 表名(
列名 字段类型 not null, #非空
列名 字段类型 primary key, #主键
列名 字段类型 unique, #唯一
列名 字段类型 default 值, #默认
列名 字段类型 check(列名=‘’or列名=‘’), #检查
constraint 约束名 foreign key(列名) reference 主表(被引用列名)
)
主键,外键,唯一键自动生成索引
主键和唯一的区别
- 主键不允许为空,唯一键可以
- 一个表中至多一个主键,唯一键可以有多个
- 均允许两个列组成一个键(在表级中的括号里直接写两个列名)
- 均保证唯一性
create table unique_test3(
test_id int not null,
test_name varchar(255),
test_pass varchar(255),
# 使用表级约束语法建立唯一约束,指定两列组合不允许重复
constraint test3_uk unique(test_name,test_pass)
);
外键的特点
- 在从表设置外键的关系
- 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
- 主表的关联列必须是一个key(一般是主键或唯一)
- 插入数据时,先插入主表;删除数据时,先删除从表
修改表时添加约束
外键
alter table 表名 add foreign key(列名) references 主表(被引用列)
列级约束(非空、默认)
alter table 表名 modify column 列名 数据类型 新约束键名;
modify 为列级约束语法来增加唯一约束
表级约束(主键、唯一)
alter table 表名 add 【constraint 约束名】键名(列名);
【constraint 名】是给键重命名,可以省略,省略后有默认的名字
add 关键字来增加唯一约束
修改表时删除约束
对于大部分数据库而言,删除约束都是在alter table 语句后使用 “drop constraint 约束名”语法来完成的, 但是Mysql并不使用这种方式,而是使用“drop index 约束名 ” 的方式来删除约束
外键
alter table 表名 drop foreign key 约束名;
唯一
alter table 表名 drop index 索引名;
主键
alter table 表名 drop PRIMARY KEY
列级约束(非空、默认)
alter table 表名 modify column 列名 数据类型
自增长列
特点
- 不用手动插入值,可以自动提供序列值,默认从1开始,步长为1。如果更改起始值:手动插入值;如果更改步长:更改系统变量
set auto_increment_increment=值;
- 一个表至多有一个自增长列
- 自增长列只支持数值型
- 自增长列必须为一个key(mysql中)
创建表时设置自增长列
create table 表(
列名 数据类型 约束 auto_increment
)
修改表时设置自增长列
alter table 表 modify column 列名 数据类型 约束 auto_increment
删除自增长列
alter table 表 modify column 列名 数据类型 约束