1.概念
约束英文: constraint
约束实际上就是表中数据的限制条件
2.作用
表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)部分重复。
3.分类
(1).主键约束(primary key)PK
(2).自增长约束(auto_increment)
(3).非空约束(no null)
(4).唯一性约束(unique)
(5).默认约束(default)
(6).零填充约束(zerofill)
(7).外键约束(foreign key)FK
4.主键约束
(1).概念
[1].MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便在RDBMS中尽快的找到某一行。
[2].主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值。
[3].每个表最多只允许一个主键。
[4].主键约束的关键字是:primary key
[5].当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
(2).操作
[1].添加单列主键
创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键
方式1
语法:
-- 在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键
create table 表名(
...
<字段名> <数据类型> primary key
...
)
示例:
create table emp1(
eid int primary key,
name varchar(20),
deptId int,
salary double
);
[2].添加多列联合主键
所谓的联合主键,就是这个主键是由一张表中多个字段组成的。
注意:
[a].当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
[b].一张表只能有一个主键,联合主键也是一个主键。
语法
create table 表名(
...
primary key (字段1, 字段2, ...., 字段n)
);
示例
create table emp1(
name varchar(20),
deptId int,
salary double,
pk1 primary key(name deptId)
);
[3].通过修改表结构添加主键
主键约束不仅可以在创建表的同时创建,也可以在修改表时添加
语法:
create table 表名(
...
);
alter table <表名> add primary key(字段列表);
示例:
[a].添加单列
-- 添加单列主键
create table emp1(
eid int,
name varchar(20),
deptId int,
salary double
);
alter table emp1 add primary key(eid);
[b].添加多列主键
-- 添加多列主键
create table emp1(
eid int,
name varchar(20),
deptId int,
salary double
);
alter table emp1 add primary key(name, deptId)
[4].删除主键
一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束容易的多。
格式
alter table <数据表名> drop primary key;
示例
alter table emp1 drop primary key;
5.自增长约束(auto_increment)
(1).概念
在MySQL中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加auto_increment属性来实现主键自增长
(2).语法
字段名 数据类型 auto_increment;
(3).示例
create table t_user1(
id int primary key auto_increment,
name varchar(20)
);
(4).指定自增字段初始值
如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。例如,如果表中插入的第一条记录的id值设置为5, 那么再插入记录时,id值就会从5开始往上增加
示例
-- 方式1,创建表时指定
create table t_user1(
id int primary key auto_increment,
name varchar(20)
)auto_increment=100
-- 方式2,创建表之后指定
create table t_user1(
id int primary key auto_increment,
name varchar(20)
)
alter table t_user1 auto_increment = 100;
(5).delete和runcate在删除后自增列的变化
[1].delete数据之后自动增长从断点开始
[2].truncate数据之后自动增长从默认值起始值开始
6.非空约束(not null)
(1).概念
MySQL非空约束(not null)指字段的值不能为空,对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据系统就会报错。
(2).添加非空约束
语法
方式1:
<字段名><数据类型> not null;
方式2:
alter table 表名 modify 字段 类型 not null;
示例
-- 方式1,创建表时指定
create table t_user(
id int,
name varchar(20) not null,
address varchar(20) not null
);
-- 方式2,创建表之后指定
create table t_user(
id int,
name varchar(20),
address varchar(20)
);
alter table t_user modify name varchar(20) not null;
alter table t_user modify address varchar(20) not null;
(3).删除非空约束
语法:
alter table 表名 modify 字段 类型**
示例
alter table t_user modify name varchar(20);
alter table t_user modify address varchar(20);
7.唯一约束(unique)
(1).概念
唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,id字段加上唯一约束性索引后,每条记录的id值都是唯一的,不能出现重复的情况。
(2).语法
方式1:
<字段名> <数据类型> unique
方式2:
alter table 表名 add constraint 约束名 unique(列);
(3).示例
-- 创建表时指定
create table t_user(
id int,
name varchar(20),
phone_number varchar(20) unique -- 指定唯一约束
)
-- 创建表之后指定
create table t_user(
id int,
name varchar(20),
phone_number varchar(20)
)
alter table t_user add constraint phone_number_unique unique(phone_number);
8.默认约束(default)
(1).概念
MySQL默认值约束用来指定某列的默认值
(2).语法
方式1:
<字段名> <数据类型> default <默认值>;
方式2:
alter table 表名 modify 列名 类型 default 默认值;
(3).示例
--创建表时指定
create table t_user1(
id int,
name varchar(20),
address varchar(20) default '北京' -- 指定默认约束
);
--创建表之后指定
create table t_user1(
id int,
name varchar(20),
address varchar(20)
);
alter table t_user1 modify address varchar(20) default '北京';
9.零填充约束(zerofill)
(1).概念
[1].插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
[2].zerofill默认值为int(10)
[3].当使用zerofill时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127, 无符号为0-256。
(2).添加
语法
<字段名称> <数据类型> zerofill;
示例
create table t_user(
id int zerofill, -- 零填充约束
name varchar(20)
);
(3).删除
语法
alter table 表名 modify 字段名称 数据类型;
示例
alter table t_user modify id int;