MySQL数据库:外键、唯一键、唯一索引

目录

说明

一、如果要使用外键,表的存储引擎选择哪个?

1.1 答

1.2 示范

1.2.1 主表

(1)MyISAM的表:masterTable2

(2)InnoDB的表:masterTable1

1.2.2 从表

(1)外键是MyISAM的表(提示错误)

(2)外键是InnoDB的表(创建成功)

二、外键的主要作用是什么?

三、外键可以为null吗?

四、设置外键跟设置唯一键有什么区别?

五、为何主键和唯一键没建索引,却已有索引?

六、设置外键的列必须设置唯一键吗?

6.1 答

6.2 示范

(1)主表(userId不是唯一键,也不是主键)

(2)从表(创建失败)


说明

(1)下面的所有举例,只要表名一样,就表示是说的同一个表。

(2)mysql版本号

一、如果要使用外键,表的存储引擎选择哪个?

1.1 答

mysql表的存储引擎要是InnoDB。

且外键的两个表存储引擎必须相同。

这是因为MyISAM和InnoDB是MySQL中两种不同的存储引擎。

它们的设计目标和重点不同,MyISAM不支持事务及外键,InnoDB支持事务及外键。

MyISAM的设计目标是快速读取,适用于读取频繁的应用程序。

而InnoDB的设计目标是支持高并发的事务处理,适用于写入频繁的应用程序。

1.2 示范

1.2.1 主表

(1)MyISAM的表:masterTable2

CREATE TABLE masterTable2 (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  userId bigint(20) DEFAULT NULL,
  name varchar(255) DEFAULT NULL,
  phone varchar(20) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY UK_2 (userId)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

查看表数据存储引擎:

SHOW TABLE STATUS LIKE 'mastertable2';

(2)InnoDB的表:masterTable1

CREATE TABLE masterTable1 (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  userId bigint(20) DEFAULT NULL,
  name varchar(255) DEFAULT NULL,
  phone varchar(20) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY UK_1 (userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

查看表数据存储引擎:

SHOW TABLE STATUS LIKE 'mastertable1';

1.2.2 从表

(1)外键是MyISAM的表(提示错误)

CREATE TABLE slaveTable (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  userId bigint(20) DEFAULT NULL,
  name varchar(255) NOT NULL,
  phone varchar(20) DEFAULT NULL,
  PRIMARY KEY (id),
  constraint FK_1 foreign key(userId) references masterTable2(userId)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

(2)外键是InnoDB的表(创建成功)

CREATE TABLE slaveTable (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  userId bigint(20) DEFAULT NULL,
  name varchar(255) NOT NULL,
  phone varchar(20) DEFAULT NULL,
  PRIMARY KEY (id),
  constraint FK_1 foreign key(userId) references masterTable1(userId)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

二、外键的主要作用是什么?

保持数据的一致性、完整性。

三、外键可以为null吗?

mysql 数据库 外键允许为 null or 空。

插入数据:

insert into masterTable1 (userId, name, phone) values (1, "1我是谁", 1234);

insert into masterTable1 (userId, name, phone) values (null, "1我是谁", 1234);

insert into slaveTable (userId, name, phone) values (null, "slave1", 1234);

insert into slaveTable (userId, name, phone) values (1, "slave22", 12345);

主表数据:

从表数据,外键有null的情况:

四、设置外键跟设置唯一键有什么区别?

两者是两个内容。

外键:一个表可以有多个列是外键。

唯一键:一个表可以有多个列是唯一键。

五、为何主键和唯一键没建索引,却已有索引?

那是因为MySQL默认在建立主键或者唯一键的时候,就建立了索引。


六、设置外键的列必须设置唯一键吗?

6.1 答

外键在从表中。

外键的建立原则:外键引用的那个列在主表中必须是主键列或者唯一列。

6.2 示范

(1)主表(userId不是唯一键,也不是主键)

CREATE TABLE masterTable3 (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  userId bigint(20) DEFAULT NULL,
  name varchar(255) DEFAULT NULL,
  phone varchar(20) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

(2)从表(创建失败)

CREATE TABLE slaveTable3 (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  userId bigint(20) DEFAULT NULL,
  name varchar(255) NOT NULL,
  phone varchar(20) DEFAULT NULL,
  PRIMARY KEY (id),
  constraint FK_11 foreign key(userId) references masterTable3(userId)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


我是程序员娟娟,

致力将工作中遇到的问题和解决方案记录下来,

分享给更多需要的同行。

如果对你有帮助,不妨点个关注吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/177514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人力资源管理后台 === 首页+部署

目录 1.首页-echarts图表的应用 2.首页-echarts图表的按需导入 3.路由模式-将路由改成history模式 4. 打包分析-分析 5.CDN加速 6.项目打包-安装nginx 7.mac/windows环境下nginx部署启动项目 8.nginx解决history的404问题 9.nginx配置代理解决生产环境跨域问题 1.首页-…

【学习草稿】pid控制基础实现--往水桶注水

pid 1)非常通俗易懂的PID控制(1)https://zhuanlan.zhihu.com/p/37515841 球场上运动至指定地点(比例控制):有图【很直观的帮助理解】&有文字分析 2)初识PID-搞懂PID概念 https://zhuanlan.…

Linux4.6、进程优先级

个人主页:Lei宝啊 愿所有美好如期而遇 目录 进程优先级是什么? 为什么会有进程优先级? 那么优先级是如何办到的? 最后一个问题:Linux为什么要限制优先级? 进程优先级是什么? 就是进程在访…

2021年06月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题3分,共30分) 第1题 执行下列程序,输出的结果为? A:12 B:24 C:8 D:30 答案:B 第2题 执行下列程序,角色说出的内容是? A:2 B:3 C:4 D:5 答案:A 第3题 执行下列程序,输出结果为?

【Flutter】graphic图表实现自定义tooltip

renderer graphic中tooltip的TooltipGuide类提供了renderer方法,接收三个参数Size类型,Offset类型,Map<int, Tuple>类型。可查到的文档是真的少,所以只能在源码中扒拉例子,做符合需求的修改。 官方github示例 官方示例 这个例子感觉像是tooltip和提供的那些属性的…

2023年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 一、问题求解&#xff1a;真题&#xff08;2023-01&#xff09;真题&#xff08;2023-02&#xff09;真题&#xff08;2023-03&#xff09;真题&#xff08;2023-04&#xff09;真题&#xff08;2023-05&#xff09;真题&#xff08;2023-06&#xff09;真题&#xff…

【密码学】【安全多方计算】浅析隐私求交PSI

文章目录 隐私求交的定义隐私求交方案介绍1. 基于DH的PSI方案2. 基于OT的PSI方案3.基于OPRF的PSI方案 总结 隐私求交的定义 隐私集合求交使得持有数据参与方通过计算得到集合的交集数据&#xff0c;而不泄露任何交集以外的数据信息。 隐私求交方案介绍 1. 基于DH的PSI方案 …

Aapche Dubbo 不安全的 Java 反序列化 (CVE-2019-17564)

漏洞描述 Apache Dubbo 是一个高性能的、基于 Java 的开源 RPC 框架。 Apache Dubbo 支持不同的协议&#xff0c;它的 HTTP 协议处理程序是 Spring Framework 的 .org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter Spring Framework 的安全警告显示&am…

计算机系统漫游

编译系统 预处理&#xff08;Preprocessing&#xff09;&#xff1a; 预处理器根据源代码中的预处理指令&#xff0c;如#include和#define等&#xff0c;将源代码转换为另一份源代码。预处理器的输出通常会保存在hello.i的文件中。编译&#xff08;Compilation&#xff09;&…

为什么要坚持每天做公域引流

做公域不一定等于拍视频&#xff0c;真正适合小白的引流方式其实还是做图文内容&#xff0c;比如小红书发帖&#xff0c;知乎问答&#xff0c;微信读书&#xff0c;问一问等。 长期坚持每天做公域引流有以下好处&#xff1a; 提高品牌知名度&#xff1a;每天坚持做公域流量&a…

nodejs+vue+elementui学生竞赛管理系统65o97

高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生体育 能力与创新思维、学生竟赛管理系统检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而我所在学院多采用半手工管理学生竟赛的方式&#xff0c;所以有必要开发学生竟赛管理系统来对学生…

2015年五一杯数学建模B题空气污染问题研究解题全过程文档及程序

2015年五一杯数学建模 B题 空气污染问题研究 原题再现 近十年来&#xff0c;我国 GDP 持续快速增长&#xff0c;但经济增长模式相对传统落后&#xff0c;对生态平衡和自然环境造成一定的破坏&#xff0c;空气污染的弊病日益突出&#xff0c;特别是日益加重的雾霾天气已经干扰…

前端管理制度

数据运营中心的管理形式&#xff1a; 数据运营中心的管理形式 竖向是各小组 横向是项目管理 负责人的定位&#xff1a; 只是工作的内容不同&#xff0c;没有上下级之分 帮助组员找到适合的位置&#xff0c;帮助大家解决问题&#xff0c;给大家提供资源 前端组的工作形式&am…

MySQL数据库如何实现跨服务器访问数据

点击上方蓝字关注我 在使用MySQL数据库时&#xff0c;很多同学经常会问&#xff0c;我能跨服务器访问另一库的数据么&#xff1f;得到的答案很多时候是让人失望的。那么如果真的需要访问&#xff0c;又不想使用拷贝表及数据的方式&#xff0c;可以实现么&#xff0c;又该如何实…

无货源商城搭建的几种方案(电商商品采集API)

随着电商行业的快速发展&#xff0c;越来越多的商家开始考虑搭建自己的电商商城。然而&#xff0c;对于一些没有自己的货源或者想要快速进入电商领域的商家来说&#xff0c;从哪里获取商品成为了他们面临的首要问题。本文将介绍几种无货源商城的搭建方案&#xff0c;帮助商家快…

【创建和排查隐藏进程和隐藏计划任务】

Window 创建隐藏进程和隐藏计划任务&#xff1a; 隐藏进程&#xff1a; 在Windows中&#xff0c;隐藏进程主要通过修改进程属性或使用第三方工具实现。以下是一个使用PowerShell脚本创建隐藏进程的示例&#xff1a; $Script {Start-Process -FilePath "notepad.exe"…

设二维数组a[1...m,1...n]()含有m*n个整数。写一个算法判断a中所有元素是否互不相同,并输出相关信息(yes/no)

设二维数组a[1…m&#xff0c;1…n]&#xff08;&#xff09;含有m*n个整数。 写一个算法判断a中所有元素是否互不相同&#xff0c;并输出相关信息&#xff08;yes/no) 分析其时间复杂度 代码思路&#xff1a; 这种如果纯暴力做的话时间复杂度非常高。 我这里考虑把题目中的二…

地理坐标系转换

1.EPSG代码 搜索地理坐标系对应的EPSG代码 https://epsg.io/ 常用的地理坐标系EPSG代码&#xff1a; 2. 坐标系转换 转换网址&#xff1a; https://epsg.io/transform &#xff08;1&#xff09;修改 input coordinate system 和 output coordinate system&#xff0c; 可以…

Zookeeper 实战 | Zookeeper 和Spring Cloud相结合解决分布式锁、服务注册与发现、配置管理

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

攻关眼科难题!第一届爱尔眼科-四川大学科研基金完成立项

当前我国眼科患者数量不断增长&#xff0c;人民群众对高质量的眼健康的需要不断攀升&#xff0c;而目前国内眼科医疗资源远不能满足需求&#xff0c;疑难眼病诊疗能力及学术科研体系建设仍有较大进步空间。基于此&#xff0c;爱尔眼科携手四川大学共同设立爱尔眼科-四川大学科研…