一、外键的介绍
1、外键的定义
让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化。
2、外键的作用
保持数据的一致性和完整性
3、msyql 数据库中的存储引擎?
myisam (默认)
innodb (外键需要用到innodb存储格式)
4、查看存储引擎
格式:show table status from 库名 where name='表名' ;
案例:show table status from hz017 where name='student2' ;
5、存储类型:myisam (默认)
5、查看外键方法:
(1)在navicat中查看
(2)格式:show create table 表名;
二、外键运用
(一)建表时创建外键
(1)创建 engine=INNODB 格式
格式:
CREATE table 表名 (字段名 字段类型(字符长度) PRIMARY key , 字段名 字符类型(字符长度) ,constraint 外键名 FOREIGN key(子表字段)
REFERENCES 父表(父表字段)) engine=INNODB ;
案例:
父表
create table ss (id int(10) PRIMARY key, name varchar(20) )ENGINE=INNODB ;
子表
CREATE table cc (cid int(10) PRIMARY key ,cname VARCHAR(20) ,constraint wj FOREIGN key(cid)
REFERENCES ss(id)) engine=INNODB ;
constraint 外键 名 (指定外键名)
FOREIGN key 子表字段 指定的字段
REFERENCES 父表(父表字段) 引用外部表的主键
(二)建表以后再添加外键
格式:
alter TABLE 子表 add CONSTRAINT 外建名 FOREIGN key (子表字段) REFERENCES 父表(父表字段)
(1)新建两个表
父表
create table xx (id int(10) PRIMARY key ,name varchar(20))engine=INNODB ;
子表
create table yy (yid int(10) PRIMARY key ,yame varchar(20))engine=INNODB ;
select * from xx ;
SELECT * from yy;
show create table yy;
alter TABLE yy add CONSTRAINT wjm FOREIGN key (yid) REFERENCES xx(id)
删除外键:
格式:ALTER TABLE 表名 drop foreign key 外键名;
案例:ALTER TABLE yy drop foreign key wjm ;
外键特点:
外键实际操作:
1、当父表不存在的数据,子表也无法插入数据(子表无法插入数据)
2、父表中存在的数据,子表就可以插入数据(插入数据)
3、删除数据,子表中存在的数据,直接删除父表是无法删除 (要先删除子表数据,在删除父表数据)
4、删除父表的数据,先删除子表,在删除父表