1. 约束
1.1. 概念
约束是对表中数据的限制条件。
1.2. 分类
1.2.1. 主键
主键约束=唯一+非空
- 关键字:
primary key
- 性质
- 一张表最多1个主键
- 多个列可以联合作为主键
- 数据库会在主键字段(包括组合列)上创建唯一索引。
- 操作
-- 创建时加约束 CREATE table if not EXISTS table_name( id INT comment 'ID' PRIMARY KEY, name VARCHAR(20) comment '姓名', gender VARCHAR(1) comment '性别' ); -- 创建时加约束,[constraint CONSTRAINT_name]可以省略,会默认给一个主键名称 CREATE table if not EXISTS table_name( id INT comment 'ID', name VARCHAR(20) comment '姓名', gender VARCHAR(1) comment '性别', CONSTRAINT CONSTRAINT_name PRIMARY KEY(id) ); -- 联合主键约束,即对多个列的组合创建主键约束,只能用上面的第二种方法创建。 CREATE table if not EXISTS table_name( id INT comment 'ID', name VARCHAR(20) comment '姓名', gender VARCHAR(1) comment '性别', PRIMARY KEY(id,name) ); -- 创建后添加 alter table table_name add CONSTRAINT pk_name PRIMARY KEY(id); alter table table_name add PRIMARY KEY(id); -- 删除主键约束 alter table table_name drop PRIMARY KEY;
- 作用
唯一标识某条记录,即某个对某个列或某几个列添加主键约束,那么表中的所有记录在这个列/几个列上的值都是唯一的。
1.2.2. 自增长
- 关键字:
auto_increment
- 作用:插入时如果设置为null,则数据库会自动填入一个自增的值,默认从1开始,步长为1。
- 性质:
- 只能作用于主键
- 数据库填入的自增值是上一条插入的记录的值+1。如果某次插入记录时在自增列上使用自定义的值,假设是n,那么下次数据库产生的自增值是n+1。
- 数据类型必须是整数型
- 自增值的上限是自增列数据类型的范围上限,比如int型,当自增值达到2^31-1,再进行记录插入,自增值仍然是2^31-1。
- 设置自增长、设置初始值、删除自增长
-- 设置初始值 CREATE table if not EXISTS table_name( id INT comment 'ID' PRIMARY KEY auto_increment, name VARCHAR(20) comment '姓名', gender VARCHAR(1) comment '性别' )auto_increment=20210101; -- 修改初始值 alter table table_name auto_increment=20220101; -- 删除auto_increment #删除auto_increment不能像主键约束一样使用drop,可以通过change修改字段来消除auto_increment alter table table_name CHANGE id id int ;
1.2.3. 非空
- 关键字:
not null
- 作用:作用的字段不能为null
-
操作:
-- 创建时添加 CREATE table if not EXISTS table_name( id INT comment 'ID' PRIMARY KEY auto_increment, name VARCHAR(20) not null comment '姓名', gender VARCHAR(1) not null comment '性别' ) -- 创建后添加 alter table table_name modify gender VARCHAR(1) not null; -- 删除not null alter table table_name modify gender VARCHAR(1);
1.2.4. 唯一性
- 关键字:
unique
- 作用:保证字段数据的唯一性
- 性质:
- 允许多个null,null和任何值都不相等
- UNIQUE和Primary Key一样,也是一种key。
- 操作:
-- unique约束 -- 创建时添加 CREATE table if not EXISTS table_name( id INT comment 'ID' PRIMARY KEY auto_increment, name VARCHAR(20) not null comment '姓名', gender VARCHAR(1) not null comment '性别', phone char(11) UNIQUE ) -- 创建后添加 alter table table_name add CONSTRAINT uq_name UNIQUE(phone); alter table table_name add UNIQUE(phone); -- 删除unique ALTER TABLE table_name drop INDEX uq_name ; ALTER TABLE table_name drop KEY uq_name ;
1.2.5. 默认
- 关键字:
default
- 作用:如果记录插入时字段未指定值,则自动填入该字段的默认值。如果插入null,则填入Null而不会填入默认值。
- 操作
-- 创建时指定 CREATE table if not EXISTS table_name( id INT comment 'ID' , name VARCHAR(20) comment '姓名', gender VARCHAR(1) comment '性别' DEFAULT '男', phone char(11) ) -- 创建后指定 alter table table_name modify gender VARCHAR(1) DEFAULT '女'; alter table table_name CHANGE gender gender VARCHAR(1) DEFAULT '女'; -- 删除默认值 alter table table_name modify gender VARCHAR(1) DEFAULT NULL; -- 删除默认值 alter table table_name modify gender VARCHAR(1);
1.2.6. 零填充
1.2.7. 外键