当前位置: 首页 > 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…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

GitHub 趋势日报 (2025年06月06日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...