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

news2024/11/24 20:08:00

目录

说明

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

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.coloradmin.cn/o/1260675.html

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

相关文章

图书管理系统源码,图书管理系统开发,图书借阅系统源码四TuShuManager应用程序MVC视图View

Asp.net web应用程序MVC之View视图 .ASP.NET MVC页面也就是要说的视图基本被放在Views文件夹下; 2.利用APS.NET MVC模板生成框架,Views文件夹下的默认页面为.cshtml页面; 3.ASP.NET MVC默认页面为Razor格式的页面,因此默认页面为.…

无人机光伏巡检代替人工,贵州电站运维升级

无人机光伏巡检如何做到降本增效?贵州省光伏电站有新招!某70MWp的光伏电站通过引入复亚智能无人机光伏巡检系统,专注于使用无人机对区域内的光伏面板进行自动巡航巡查,利用自动化巡检和故障识别技术,显著提升了光伏电站…

UniPro集成华为云WeLink 为企业客户构建互为联接的协作平台

华为云WeLink是华为开启数字化办公体验、帮助企业实现数字化转型的实践,类似钉钉。UniPro的客户企业中,有使用WeLink作为协作工具的,基于客户的实际业务需求,UniPro实现了与WeLink集成的能力,以帮助客户企业丰富和扩展…

【触想智能】无风扇工控电脑一体机使用优势分析

无风扇工控电脑一体机是属于工控一体机分类中的其中一种,看名字,很明显就是没有散热风扇的工控电脑一体机,而平常我们使用的电脑主机是带有电源风扇、CPU散热风扇的。 无风扇工控电脑一体机的配置组成和商用电脑主机的配置基本一样&#xff0…

【读懂AUTOSAR】DoIP模块(1)-- 使用场景和链接的建立规范

引子 --什么是?为什么使用DoIP? DoIP就是通过IP进行诊断的意思(Diagnostic Over IP)。我们熟悉的诊断都是通过CAN总线的啊,为什么要通过IP?IP是什么? IP就是Internet Protocol,就是”互联网协议“啦! 那DoIP就是通过互联网进行的诊断喽,也可以叫做“基于以太网的诊…

JMeter之压力测试——混合场景并发

在实际的压力测试场景中,有时会遇到多个场景混合并发的情况,这时就需要设置不同的并发比例对不同场景请求数量的控制,下面提供两种方案。 一、多线程组方案 1.业务场景设计如下:场景A、场景B、场景C,三个场景按照并发…

FPGA模块——AD高速转换模块(并行输出转换的数据)

FPGA模块——AD高速转换模块(并行输出转换的数据) (1)AD9280/3PA9280芯片(2)代码 (1)AD9280/3PA9280芯片 AD9280/3PA9280芯片的引脚功能: 工作电压2.7到5.5v 数据对应&a…

<Linux> 文件理解与操作

目录 前言: 一、关于文件的预备知识 二、C语言文件操作 1. fope 2. fclose 3. 文件写入 3.1 fprintf 3.2 snprintf 三、系统文件操作 1. open 2. close 3. write 4. read 四、C文件接口与系统文件IO的关系 五、文件描述符 1. 理解文件描述符 2. 文…

商用车自动驾驶政策现状及趋势预判

一、我国自动驾驶法规政策体系 二、重点领域法规政策进展 1、战略引导 2、法律法规 3、标准体系 4、测试认证 5、创新支持 6、配套环境 三、“十四五”期间政策发展趋势 1、应用场景 2、法规标准趋势

Vue框架学习笔记——条件渲染:v-show和v-if

文章目录 前文提要条件渲染v-showv-ifv-else-if和v-else特殊写法,很多个一致的v-if如何消除 总结 前文提要 本人仅做个人学习记录,如有错误,请多包涵 主要学习链接:尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 条件渲染 条…

QT QComBox实现模糊查询

一、概述 在Qt中,可以通过QComboBox和QLineEdit实现模糊查询的功能。模糊查询是指根据用户输入的文本,在下拉框的选项中进行模糊匹配,并动态地显示匹配的选项。 二、基础知识 1、QCompleter (1)QCompleter 是 Qt 框架中提供的一个用于自动…

12 网关实战:Spring Cloud Gateway基础理论

为什么需要网关? 传统的单体架构中只有一个服务开放给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,那么作为客户端如何去调用这些微服务呢?如果没有网关的存在,只能在本地记录每个微服务的调用地址。 无网关的微服务架构往往存在以下问题: 客户端多次请求…

ElasticSearch学习笔记(一)

计算机软件的学习,最重要的是举一反三,只要大胆尝试,认真验证自己的想法就能收到事办功倍的效果。在开始之前可以看看别人的教程做个快速的入门,然后去官方网站看看官方的教程,有中文教程固然是好,没有中文…

从容应对高并发:RabbitMQ与消息限流策略的完美结合

在当今互联网时代,高并发访问已成为许多应用系统面临的常见挑战之一。对于需要处理大量请求的系统来说,如何保证系统的稳定性和可靠性是一个关键问题。RabbitMQ作为一种可靠的消息队列中间件,可以帮助解决高并发环境下的消息处理问题。而结合…

“智”护城市生命线,宏电亮相第十届中国(上海)国际管网展

11月22-24日,第十届中国(上海)国际管网展览会在国家会展中心盛大举办,展会旨在配合推进国家基础建设工作,推动管网改造建设,汇聚了三百余家优秀企业参展,展示产品及技术覆盖管网建设、智慧水务、…

LeetCode-面试题08.01 三步问题 C/C++实现 超详细思路及过程[E]

🎈归属专栏:深夜咖啡配算法 🚗个人主页:Jammingpro 🐟记录一句:摆了一个周末了,不能摆了,努力起来!! 文章目录 LeetCode-面试题08.01 三步问题🚗题…

Hiera实战:使用Hiera实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集_pickle.PicklingError: Cant pickle <function Head.<lambda> at 0x000001DE8DD7F240>: attribute lookup Head.<lambda> on hiera.hiera failed 摘要 现代层次视觉变…

基于DSP/SOC音乐灯效系统设计方法

音乐灯效系统设计方法 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 三种方法: (1)MIC 采集音乐信号变化,(2)直接获取SPK 模拟音频…

OBS Studio 30.0 正式发布:支持 WebRTC

导读OBS Studio 30.0 已正式发布。此版本移除了对 Ubuntu 20.04、Qt 5 和 FFmpeg 4.4 之前版本的支持。 OBS Studio 30.0 已正式发布。此版本移除了对 Ubuntu 20.04、Qt 5 和 FFmpeg 4.4 之前版本的支持。 主要变化包括&#xff1a; 支持 WebRTC&#xff08;详情查看 OBS Stu…

s_v_web_id或fp协议过签名,dy滑块

某音s_web_id或fp协议过签名 ‘h5_sdk_version’, ‘2.36.0’ "search_impr":{"entity_id":"1135137973613200"},"link_item_list":null,"user_permissions":null,"offline_info_list":null,"is_cf":…