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

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;


我是程序员娟娟,

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

分享给更多需要的同行。

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

相关文章:

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

目录 说明 一、如果要使用外键,表的存储引擎选择哪个? 1.1 答 1.2 示范 1.2.1 主表 (1)MyISAM的表:masterTable2 (2)InnoDB的表:masterTable1 1.2.2 从表 (1&am…...

CSS核心功能手册:从熟悉到精通

CSS核心功能代码 文章目录 CSS核心功能代码[toc]参考HTML代码尺寸操作设置元素尺寸内边距外边距设置默认布局边距用途和使用场景: 背景设置**背景颜色 (background-color)**:**背景图像 (background-image)**:**背景重复 (background-repeat)**:**背景位置 (backgro…...

编程的重要性及解决技术难题的方法

看到这个话题之后,出于好奇,使用某chat,输入相应主题得到的一篇文章,分享给大家。 PS:现在不同版本的chat和其快速更新升级也可以说是编程的结果,其重要性和发展历程也反映了编程的重要性。 一、编程的重要…...

如何成为一名高效的前端开发者(10X开发者)

如今,每个人都想成为我们所说的“10倍开发者”。然而,这个术语经常被误解和高估。 本质上,一个高效或者10倍开发者,在我看来,是指那些能够充分利用所有可用工具的人,通过让这些工具处理冗余和重复的任务&am…...

Docker port 命令

docker port:列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。 语法 docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]实例 查看容器mymysql的端口映射情况: docker port mymysql##效果如下: …...

PostgreSQL-SQL联表查询LEFT JOIN 数据去重复

我们在使用left join联表查询时,如果table1中的一条记录对应了table2的多条记录,则会重复查出id相同的多条记录。 1、解决方法一 SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.id t2.tid 第一种方法我们发现还是有重复数据 2、解决方法二…...

Golang与MongoDB的完美组合

引言 在现代开发中,数据存储是一个至关重要的环节。随着数据量的增加和复杂性的提高,开发人员需要寻找一种高效、可扩展且易于使用的数据库解决方案。MongoDB作为一种NoSQL数据库,提供了强大的功能和灵活的数据模型,与Golang的高…...

初识Java 18-2 泛型

目录 构建复杂模型 类型擦除 C中的泛型 迁移的兼容性 类型擦除存在的问题 边界的行为 对类型擦除的补偿 创建类型实例 泛型数组 本笔记参考自: 《On Java 中文版》 构建复杂模型 泛型的一个优点就是,能够简单且安全地创建复杂模型。 【例子&am…...

vue分环境打包及案例代码

Vue分环境打包可以帮助我们针对不同的环境(如开发环境、测试环境、生产环境等)打包出不同的版本,以满足不同的需求。下面是一个简单的Vue分环境打包的示例代码: 安装cross-env: npm install --save-dev cross-env在项目的根目录下创建不同的环境配置文件,如test.env.js…...

基于springboot+vue的在线考试系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

重装linux后需要做的配置

1. linux中 vim如果输入中文乱码 打开/etc/vim/vimrc输入: set fileencodingsutf-8,gbk set termencodingutf-8 set encodingutf-8 把vim的缩进格式顺便改了 http://t.csdnimg.cn/K3ncc 2. 配置sudo授权用户 3. 新导入项目后 , chmod -R x 添加权限 4. 查询主机i…...

【华为数通HCIP | 网络工程师】821刷题日记-IS-IS(2)

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…...

Linux系统-----进程管理(进程的创建与控制)

目录 前言 进程 1.基本概念 2.特征 3.Linux系统的进程 进程的创建 1. fork()函数 2. 多进程的创建与输出 进程的控制 1. exec()系列 2. wait() 函数 3. execl( )和fork( )联合使用 4. exit( ) 前言 前面我们学习了Linux系统的基本指令以及如…...

Unity 获取物体的子物体的方法

Unity 中要获取物体的子物体,可以使用以下一些方法。 1、只获取一级节点的子物体: public Transform tran;// Start is called before the first frame updatevoid Start(){foreach (Transform child in tran){Debug.Log(child.name);}} 使用该方法只会…...

RocketMQ 读写压测

一、Producer 压测 [rootsz-glbd-mq-108-249 rocketmq-all-5.1.3-bin-release]# sh bin/tools.sh org.apache.rocketmq.example.benchmark.Producer -n 10.XXX.108.249:9876 -t TopicTest_LEXIN_2023_pop_128 -w 64 16:39:18,402 |-INFO in org.apache.rocketmq.logging.ch.qo…...

PHP调用API接口的方法及实现(一键采集淘宝商品详情数据)

随着互联网、云计算和大数据时代的到来,越来越多的应用程序需要调用第三方的API接口来获取数据,实现数据互通和协同工作。PHP作为一种常用的服务器端语言,也可以通过调用API接口来实现不同系统的数据交互和整合。本文将介绍PHP调用API接口的方…...

得物App安卓冷启动优化-Application篇

前言 冷启动指标是App体验中相当重要的指标,在电商App中更是对用户的留存意愿有着举足轻重的影响。通常是指App进程启动到首页首帧出现的耗时,但是在用户体验的角度来看,应当是从用户点击App图标,到首页内容完全展示结束。 将启…...

【实战教程】PHP与七牛云的完美对接

前言: 随着互联网的迅速发展,越来越多的网站和应用程序需要处理大量的图片、视频和其他文件。为了有效地存储和管理这些文件,并提供快速的内容分发服务,开发者们常常依赖于云存储和CDN服务提供商。 七牛云是一家领先的云存储和C…...

Go 接口:nil接口为什么不等于nil?

一、Go 接口的地位 Go 语言核心团队的技术负责人 Russ Cox 也曾说过这样一句话:“如果要从 Go 语言中挑选出一个特性放入其他语言,我会选择接口”,这句话足以说明接口这一语法特性在这位 Go 语言大神心目中的地位。 为什么接口在 Go 中有这么…...

(UM1724) STM32 Nucleo-64 boards User manual

STM32 Nucleo-64 评估板用户手册 0. 前言1. 介绍[^1]2. Ordering information2.1 包装编号说明3. 开发环境4. 跳线端子 ON/OFF 的约定5. 快速入门6. 硬件布局与配置6.10 扩展连接器6.11 ARDUINO 连接器6.12 ST morpho 连接器7. Nucleo-64 评估板信息0. 前言 【相关博文】 【STM…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...