当前位置: 首页 > news >正文

外键

外键
一、外键的介绍
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)公司数据量大,造成数据重复,新旧表维护成本大,使用外键让公司数据进行分类和管理,让基础数据放在主表,子表单一化,避免数据冗余。

http://www.hskmm.com/?act=detail&tid=17144

相关文章:

  • 菜油
  • 索引
  • 存储过程
  • 编写msyql8.0.21 数据库批量备份脚本
  • 完整教程:基础算法---【差分】
  • Android 源码中如何生成一个platform JKS 文件?
  • WPF小知识
  • 后端面试八股(go 方向)
  • ArcGIS 不重叠且无缝的拓扑检查和修改
  • 2025/9/25
  • 读书笔记:揭开索引的两个常见误区
  • 国标GB28181平台EasyGBS如何赋能路网数字化管理与应急指挥?
  • 获取用户ip所在城市
  • 【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践
  • 第13章 day14-15 Webpack逆向
  • Viper远程配置踩坑记录
  • 国产智能体脂秤PCBA方案设计
  • 第15章 day18 Ast系列篇
  • 微波雷达模块在智能家居中的具体应用案例有哪些?
  • Ubuntu 桌面快捷方式创建增加记录
  • 队列
  • arm64中的内存屏障指令
  • 三分
  • 完整教程:微服务基础2-网关路由
  • nginx ipv6 proxy配置
  • (三)数仓人必看!ODS 到 DWS 各层设计规范全解析,含同步/存储/质量核心要点
  • 【shell】系统资源不足fork: retry: Resource temporarily unavailable
  • 【语文训练】女乃龙?田力乃龙?
  • 抖动分为3个方面
  • 第20章 Day24 原型链