MySQL数据库 约束类型
Mysql数据库的约束类型有物种:主键约束(Primary Key),唯一性约束(Unique),非空约束(Not Null),默认约束(Default),外键约束(Foreign Key)。
一、主键约束 primary key
主键约束 primary key:它能够唯一确定一张表中的一条记录,通过向某个字段添加约束,可以使得该字段不重复且不为空。
primary key:
创建一个有主键约束的数据表:
create table user1(
id int primary key,
name varchar(20)
);
一个主键只能有一条记录,且主键不能为 NULL。
insert into user values(1,'spider');
insert into user values(1,'spider'); #不能重复插入主键为 1 的记录,会报错
insert into user values(2,'spider');
select * from user;
insert into user values(NULL,'spider'); #不能插入主键为 NULL 的记录,会报错
联合主键:
创建一个联合主键为(id,name)的数据表:
create table user2(
id int,
name varchar(20),
password varchar(20),
primary key(id,name)
);
联合的主键值加起来不重复就可以。
insert into user2 values(1,'spider','123');
insert into user2 values(2,'spider','123');
自增约束 auto_increment:
create table user3(
id int primary key auto_increment,
name varchar(20)
);
自增约束可以插入重复的数据记录,数据表会自动更新 id 值:
insert into user3 (name) values('spider');
insert into user3 (name) values('spider');
如何添加和删除主键约束?
先创建一个没有主键约束的数据表:
create table user4(
id int,
name varchar(20)
);
通过修改数据表的结构的方式,添加主键:
alter table user4 add primary key(id);
删除主键:
alter table user4 drop primary key;
通过使用 modify 修改字段的当时,添加主键:
alter table user4 modify id int primary key;
二、唯一约束 unique
唯一约束 unique:约束修饰的字段的值不可以重复。
创建一个有唯一约束的数据表:
法一:
create table user5(
id int,
name varchar(20)
);
给 name 添加一个唯一约束:
alter table user5 add unique(name);
法二:
create table user6(
id int,
name varchar(10),
unique(name)
);
#还可以添加两个约束 unique(id,name) 这样 id 和 name 加在一起不能重复,类似联合主键
法三:
create table user7(
id int,
name varchar(20) unique
);
给数据表 user5 添加一条记录:
insert into user5 values(1,'batman');
重复添加 name 为 batman 的记录会报错:
如何删除唯一约束?
alter table user7 drop index name;
通过 modify 的方式添加:
alter table user7 modify name varchar(20) unique;
三、非空约束 not_null
非空约束 not_null:修饰的字段不能为空 NULL
create table user9(
id int,
name varchar(20) not null
);
只插入 id 就会报错:
insert into user9 (id) values(1);
id 可以为空:
insert into user9 values(1,'batman');
insert into user9 (name) values('batman');
四、默认约束 default
默认约束 default :当插入字段值的时候,没有传值,就使用默认值
创建 age 的默认值为10:
create table user10(
id int,
name varchar(20),
age int default 10
);
插入数据时没有写 age 值,会默认为10:
insert into user10 (id,name) values(1,'batman');
插入数据时写了 age 值,就不会使用默认值:
五、外键约束 foreign_key
外键约束 foreign_key:涉及到两个表:主表、副表
注意:主表中没有的数据值,在副表中是不可以使用的。
主表中的记录被副表引用,是不可以被删除的
创建主表、副表:
#班级表
create table classes(
id int primary key,
name varchar(20)
);
#学生表
create table students(
id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes(id)
);
给班级表插入数据:
insert into classes values(1,'一班');
insert into classes values(2,'二班');
insert into classes values(3,'三班');
insert into classes values(4,'四班');
给学生表插入数据:
insert into students values(100,'batman',1);
insert into students values(101,'batman',2);
insert into students values(102,'batman',3);
insert into students values(103,'batman',4);
班级表里面没有5班,所以插入不存在的5班失败:
主表(班级表)中的的 id=4 被副表(学生表)引用,所以删除会报错:
delete from classes where id =4;
collapsar...: 你这么漂亮,有男朋友吗
m0_55742104: why the SYJ is the owner of FSY?