主键:primary key
外键:foreign key(应用场景:在两表或多表关联的时候设置的,用于标志两个表之间的关联关系)
create table 数据表名称(
字段名称 字段类型 字段约束[5种情况]
) default charset=utf8;
① 主键约束primary key
② 默认值约束default
③ 非空约束not null
④ 唯一约束unique key
⑤ 外键约束foreign key
原则:在一张表中,其是主键。但是在另外一张表中,其是从键(非主键),但是这个字段是两张表的关联字段。
1、外键约束作用
外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性。如果合法就会建立关联关系,当我们在外键所在表中进行操作时,另外一个表中的数据也会受到关联。
dage表:
id编号(主键) | name姓名 |
1 | 陈浩南 |
2 | 乌鸦哥 |
xiaodi表:
id编号(主键) | name姓名 | dage_id(外键) |
1 | 山鸡 | 1 |
2 | 大天二 | 1 |
3 | 乌鸦的小弟 | 2 |
外键设计原则:保证两张表的关联关系,保证数据的一致性。在选择时,一般在一个表中时关联字段,在另外一个表中是主键,则这个字段建议设置为外键。
2、对于已经存在的字段添加外键约束
-- 为cls_id字段添加外键约束
alter table 数据表 add foreign key(外键字段) references 数据表(主键)
[on delete cascade| set null] [on update cascade | set null];
3、在创建数据表时设置外键约束
-- 创建一个大哥表
create table dage(
id int not null auto_increment,
name varchar(20),
primary key(id)
) default charset=utf8;
-- 添加测试数据
insert into dage values (null, 'YY');
insert into dage values (null, '乌鸦');
-- 创建一个小弟表
create table xiaodi(
id int not null auto_increment,
name varchar(20),
dage_id int,
primary key(id)
) default charset=utf8;
-- 把dage_id设置为主键
alter table xiaodi add foreign key(dage_id) references dage(id) on delete cascade;
-- 插入测试数据
insert into xiaodi values (null, '山鸡', 1);
insert into xiaodi values (null, '大天二', 1);
insert into xiaodi values (null, '乌鸦的小弟', 2);
-- 测试外键
delete from dage where id = 2;
select * from xiaodi; -- 看看乌鸦的小弟是否还存在
-- 删除外键
show create table xiaodi; -- 查看外键名称(如xiaodi_ibfk_1)
alter table xiaodi drop foreign key xiaodi_ibfk_1;
4、删除外键约束
-- 需要先获取外键约束名称,该名称系统会自动生成,可以通过查看表创建语句来获取名称
show create table 数据表;
-- 获取名称之后就可以根据名称来删除外键约束
alter table 数据表 drop foreign key 外键名;