mysql之外键
一、外键
外键的定义:
让一张表记录的数据不要太过于冗余,在数据库中对表的关系进行解耦,尽量让表的数据单一化。
二、外键的作用?
保持数据的一致性和完整性
三、mysql 数据库中的存储引擎
myisam(默认)
innodb (外键需要这种innodb存储格式)
四、查看存储引擎
格式:show table status from 库名 where name="表名"
案例:show table status from dcs where name="student"
==============================
外键实战
(1)创建engine=innodb 格式 的表格
(2)外键,创建的表必须有主键 (子表可以不设主键)
a、建表时建外键
父表:create table s (sid int(10) PRIMARY key ,sname varchar(10)) engine=innodb;
子表:CREATE table c (id int(10) PRIMARY key ,name varchar(10),CONSTRAINT f foreign key(id) REFERENCES s1(sid) )engine=innod
CONSTRAINT 外键名
foreign key(子表关联字段) id是子表字段 外键
REFERENCES 父表(父表关联字段) 引用
b、表建好,在新建外键
mm表:create table mm (sid int(10) PRIMARY key ,sname varchar(10)) engine=innodb;
nn 表:create table nn (id int(10) PRIMARY key ,name varchar(10)) engine=innodb;
格式:alter table nn add constraint 外键名 FOREIGN key (子表关联字段 ) REFERENCES 父表(关联字段) ;
案例:alter table nn add constraint fk_wj FOREIGN key (id) REFERENCES mm(sid) ;
================================
查询是有外键:
方法一:
方法二:查看创建的索引
格式:show create table 表名 ;
show create table nn ;
================================
删除外键:
格式:alter table 表名 drop foreign key 外键名
alter table nn drop foreign key fk_wj
================================
外键中的一些特性:
1、父表不存在的数据,子表无法插入数据
2、父表中存在的数据,子表就库插入数据
3、父表和子表都是空数据,子表无法插入数据,父表可以插入数据
4、父表和子表都存在的数据,无法删除父表
5、父表和子表都存在的数据,先删除子表,在删除父表
================================
总结:
1、如何创建外键?
2、什么是外键?
3、外键的作用?
4、外键中子表和父表的关系?
5、公司中为什么用外键?
(1)保存数据的一致性和完整性
(2)公司数据量大,造成数据重复新旧表维护成本大,使用外键让公司数据进行分类和管理,让基础数据放在主表上,子表单一化,这样可以避免数据的冗余
show table status from dcs where name="student"