dcsxlh

导航

 

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"

posted on 2021-12-21 17:36  多测师_肖sir  阅读(82)  评论(0编辑  收藏  举报