外键
一、外键的介绍
1、外键的定义:
让一张表记录的数据不要太过于冗余,数据库中对表的关系进行解耦,尽量让表的数据单一化;
2、外键的作用
保持数据的一致性
3、msyql的存储引擎
myisam (默认)
innodb (外键时用innodb存储格式)
4、查看存储引擎
格式:show table status from 库名 where name=表名
案例:show table status from hh where name="emp"
5、外键:
(1)show create table 表名
案例:show create table emp ;
(2)通过工具navicat查看
二、外键的运用
(1)建表时创建外键( FOREIGN KEY)
create table 表名 (字段1 字符类型(字符长度) PRIMARY key ,字段2 字符类型(字符长度),CONSTRAINT 外键名 FOREIGN KEY
(子表的字段) REFERENCES 父表(父表关联字段)) ENGINE=INNODB ;
注意点:
1、表格存储格式ENGINE=INNODB ;
2、外键建立关联的字段时主键
格式:
create table 表名 (字段名 字符类型(字符长度) 主键 ,字段2 字符类型(字符长度),CONSTRAINT 外键名 FOREIGN KEY
(子表字段) REFERENCES 父表(父表字段)) ENGINE=INNODB ;
案例:
父表
create table mm(id int(10) PRIMARY key ,name VARCHAR(20)) ENGINE=INNODB ;
子表
create table nn(nid int(10) PRIMARY key ,nname VARCHAR(20),CONSTRAINT wjm FOREIGN KEY
(nid) REFERENCES mm(id)) ENGINE=INNODB ;
(2)建表后创建外键
格式:
alter table 子表 add CONSTRAINT 外键名 FOREIGN key (子表关联字段) REFERENCES 父表( 父表关联字段) ;
案例:
父表
create table xx(id int(10) PRIMARY key ,name VARCHAR(20)) ENGINE=INNODB ;
子表
create table yy(yid int(10) PRIMARY key ,yname VARCHAR(20)) ENGINE=INNODB ;
alter table yy add CONSTRAINT wj1 FOREIGN key (yid) REFERENCES xx(id) ;
3、外键的删除
格式:
alter table 子表 drop FOREIGN key 外键名
案例:
alter table yy drop FOREIGN key wj1 ;
三、外键的特点
1、当父表不存在的数据,子表也无法插入
案例:
INSERT into nn VALUES(1,"zs") #报错,直接插入子表
2、父表存在的数据,子表才能插入数据
案例:
INSERT into mm VALUES(1,"ls")
INSERT into nn VALUES(1,"zs")#先插入父表的数据,在插入子表的数据
3、删除数据,子表中存在的数据,直接删除父表是无法删除
DELETE from mm where id=1 ; 直接删除附表报错
4、删除数据,先删除子表存在的数据,在删除父表的数据
DELETE from nn where nid=1 ; 先删除子表的数据
DELETE from mm where id=1 ;在删除父表的数据
格式:
alter table 子表 add CONSTRAINT 外键名 FOREIGN key (子表关联字段) REFERENCES 父表( 父表关联字段) ;
子表
create table nn(nid int(10) PRIMARY key ,nname VARCHAR(20),CONSTRAINT wjm FOREIGN KEY
(nid) REFERENCES mm(id)) ENGINE=INNODB ;
格式:
create table 表名 (字段名 字符类型(字符长度) 主键 ,字段2 字符类型(字符长度),CONSTRAINT 外键名 FOREIGN KEY
(子表字段) REFERENCES 父表(父表字段)) ENGINE=INNODB ;
四、外键的面试题
1、什么是外键
2、外键的作用
3、如何创建外键
4、如何删除外键
5、公司中为什么要使用外键
(1)保持公司数据的一致性和完整
(2)公司数据量大,造成数据重复,新旧表维护成本大,使用外键让公司数据进行分类和管理,让基础数据放在主表,子表单一化,避免数据冗余。