MySQL约束类型
约束是一种限制,它通过对表的行或列的数据做出限制,以确保表的数据的完整性和唯一性
MySQL常用约束
约束类型: | 主键 | 外键 | 唯一 | 非空 | 自增 | 默认值 |
---|---|---|---|---|---|---|
关键字: | primary key | foreign key | unique | not null | auto_increment | default |
主键 primary key
主键约束相当于 唯一约束(主键约束列不允许重复)+非空约束(不允许出现空值) 的组合
每一个表中最多允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建
当创建主键的约束时,系统默认会在其所在的列和列的组合上建立对应的唯一索引
-- 基本模式
create table temp(
id int primary key,
name varchar(20)
);
-- 组合模式
create table temp(
id int,
name varchar(20),
pwd varchar(20),
primary key(id, name)
);
-- 删除主键约束
alter table temp drop primary key;
-- 添加主键约束
alter table temp add primary key(id,name);
-- 修改主键约束
alter table temp modify id int primary key;
外键 foreign key
外键表示一个表中的一个字段被另一个表中的一个字段引用,被引用表称为父表,引用表称为子表;表可以有多个外键,子表中的每个外键可能引用不同的父表
外键约束是保证一个或两个表之间的参照完整性,对相关表中的数据造成了限制
-- 基本模式
-- 父表
create table temp(
id int primary key,
name varchar(20)
);
-- 子表
create table temp2(
id int,
name varchar(20),
classes_id int,
foreign key(id) references temp(id)
);
-- 多列外键组合,必须用表级别约束语法
-- 父表
create table classes(
id int,
name varchar(20),
number int,
primary key(name,number)
);
-- 子表
create table student(
id int auto_increment primary key,
name varchar(20),
classes_name varchar(20),
classes_number int,
/*表级别联合外键*/
foreign key(classes_name, classes_number) references classes(name, number)
);
-- 删除外键约束
alter table student drop foreign key student_id;
-- 增加外键约束
alter table student add foreign key(classes_name, classes_number) references classes(name, number);
唯一约束unique
- 唯一约束是指table的列或列的组合不能重复,保证数据的唯一性,但null可以重复
- 同一个表中可以有多个唯一约束,多个列组合的约束
- 在创建唯一约束时,如果不给唯一约束名称,就默认和列明相同
- 唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束
-- 创建表时设置,表示用户名、密码不能重复
create table temp(
id int not null ,
name varchar(20),
password varchar(10),
unique(name,password)
);
-- 添加唯一约束
alter table temp add unique (name, password);
-- 修改唯一约束
alter table temp modify name varchar(25) unique;
-- 删除约束
alter table temp drop index name;
非空约束 not null
非空约束用于确保当前列的值不为空值,但非空约束只能出现在表对象的列上,所有类型的值均可以为null
-- 创建table表,ID 为非空约束,name 为非空约束 且默认值为abc
create table temp(
id int not null,
name varchar(255) not null default 'abc',
sex char null
);
-- 增加非空约束
alter table temp modify sex varchar(2) not null;
-- 取消非空约束
alter table temp modify sex varchar(2) null;
自增约束 auto_increment
当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长
只有整型列才能设置此属性,每个表只能定义一个auto_increment列,并且必须在该列上定义主键约束(primary key)或唯一约束(unique)
-- 创建table表,给字段增加自增约束
create table temp(
-- 第一种
id int primary key auto_increment
-- 第二种
id int unique auto_increment
);
-- 增加自增约束
alter table temp modify id int auto_increment primary key;
-- 修改表,为表中新增字段同时增加自增约束
alter table temp add book_no int unique auto_increment;
-- 删除表的自增主键约束
--第一步:修改该字段的数据类型方法,去处自增约束
alter table temp modify id char(10) ;
--第二步:删除该字段的主键约束
alter table temp drop primary key;
默认值 default
用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值
-- 创建table表,给字段增加默认约束
create table temp(
name varchar(10) Default "10086"
);
-- 修改table表,同时字段增加默认约束
alter table temp
chang column name varchar(10) Default "10086"
-- 删除默认值约束
alter table temp
chang column name varchar(10) Default null