首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么mysql两次显示外键值

MySQL两次显示外键值的原因是为了提高查询效率和减少数据冗余。

具体来说,MySQL在创建外键时,会自动在子表中创建一个隐藏的索引,该索引用于加速外键的查询操作。当我们查询包含外键的表时,MySQL会将外键的值显示两次,一次是实际的外键值,另一次是通过隐藏索引查询到的外键值。

这样做的好处是可以避免在查询时需要额外的联接操作,提高查询效率。同时,通过将外键值重复存储在子表中,可以减少对主表的查询,减少数据冗余。

举例来说,假设有两个表,一个是主表(Parent),另一个是子表(Child),子表中有一个外键关联到主表的主键。当我们查询子表时,MySQL会将外键的值显示两次,一次是实际的外键值,另一次是通过隐藏索引查询到的外键值。

这样设计的优势是可以提高查询效率,减少数据冗余。在应用场景上,当我们需要查询子表中的外键值时,可以直接通过查询结果获取,而不需要再次查询主表。这在大型数据库中尤为重要,可以提高查询性能和减少数据库的负载。

推荐的腾讯云相关产品是腾讯云数据库 MySQL,它是腾讯云提供的一种高性能、可扩展的关系型数据库服务。腾讯云数据库 MySQL 提供了丰富的功能和工具,可以满足各种应用场景的需求。您可以通过以下链接了解更多关于腾讯云数据库 MySQL 的信息:腾讯云数据库 MySQL

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

常见面试题(笔试题)系列

MYSQL的Innodb和Myisam引擎的区别 事务,Innodb是支持事务的,而Myisam不支持。这是MYSQL将默认存储引擎从Myisam改成Innodb的重要原因之一。...这也是MYSQL将默认存储引擎从Myisam变成Innodb的重要原因之一。 读写:Innodb擅长更新频繁的操作,而Myisam擅长查询频繁操作。...键:Innodb支持键,而Myisam不支持。对一个包含键的Innodb表转为Myisam会失败。 聚簇索引:Innodb拥有聚簇索引,Myisam没有聚簇索引。关于聚簇索引详情见下。...辅助索引的叶子节点并没有存储完整的行数据,需要先通过辅助索引的叶子节点得到主键值,然后在拿这个主键值去聚簇索引中查找对应的行记录,这里总共查找了两次,也被称为‘回表’,如何避免呢?...问题又来了,为什么Myisam既然没有聚簇索引查询速度也会比Innodb高呢 ? Innodb在做select的时候,要维护的东西比Myisam引擎多得多。

42530

开发基础规范之数据库规范

注意数值类型括号后面的数字只是表示宽度而跟存储范围没有关系,比如INT(3)默认显示3位,空格补齐,超出时正常显示,python、java客户端等不具备这个功能。...3.为什么需要避免MySQL进行隐式类型转化?因为MySQL进行隐式类型转化之后,可能会将索引字段类型转化成=号右边值的类型,导致使用不到索引,原因和避免在索引字段中使用函数是类似的。...11.为什么MySQL的性能依赖于索引?MySQL的查询速度依赖良好的索引设计,因此索引对于高性能至关重要。...InnoDB存储引擎中,secondary index(非主键索引)中没有直接存储行地址,存储主键值。...如果用户需要查询secondary index中所不包含的数据列时,需要先通过secondary index查找到主键值,然后再通过主键查询到其他数据列,因此需要查询两次

36750
  • Mysql查询及高级知识整理(上)

    Mysql基础 ?...然后两个表再进行内连接,连接等查询 SELECT emp.ename,mgr.ename FROM t_employee AS emp, t_employee AS mgr WHERE emp.mid...这个小点容易被忽视,如果第一行显示为li4,会错认为查询结果正确,导致不可估量的后果。 Mysql执行顺序 ? 在第一次查询后,会将结果缓存至本地缓存,两次查询结果时间不一致。...隔离级别 1.读未提交 2.读已提交(Mysql默认级别) 3.可重复读 4.串行化 脏读:已经更新 但未提交 不可重复读:两次读取结果不一致 幻读:读的同事另一个事务进行了写操作,导致两次查询结果不一致...选择B+Tree 时间复杂度:算法执行的复杂程度 空间复杂度:算法在运行过程中临时占用存储空间大小的量度 聚簇索引:数据存储方式,数据行和键值聚簇存储在一起 非聚簇索引:数据行和键值聚簇存储不在一起

    81140

    MySQL 数据库添加数据时为什么会产生外码(键)约束?原理就是什么?如何解决?

    文章目录 前言 一、插入新数据时报错键约束? 二、对于出错 SQL 语句的分析 三、对于外码约束的分析 四、如何处理键约束?...总结 ---- 前言 我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?...一、插入新数据时报错键约束? 我们在 Course 表中插入课程号为 1 的数据时提示违反了键约束。...三、对于外码约束的分析 我们根据数据库定义的参照完整性规则得知:键 cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 在参照表中必须存在。...---- 总结 本文我们掌握了 MySQL 数据库如何在设计不合理时遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。

    3K31

    常见公司MySQL面试题全集

    幻读:在事务A中按照某个条件先后两次查询数据库,两次查询结果的条数不同,这种现象称为幻读。不可重复读与幻读的区别可以通俗的理解为:前者是数据变了,后者是数据的行数变了。...里面最常用的索引就是B+树,有时候面试会问到为什么使用B+树,B+树有什么优势。...辅助索引叶子节点存储的不再是行的物理位置,而是主键值。通过辅助索引首先找到的是主键值,再通过主键值找到数据。...InnoDB支持键,而MyISAM不支持。对一个包含键的InnoDB表转为MYISAM会失败; 3....ref: 显示索引的哪一列被使用了 rows: 认为必须检查的用来返回请求数据的行数 extra中出现以下 2 项意味着 根本不能使用索引,效率会受到重大影响。

    38230

    MySQL间隙锁(幻读解决原理)

    专栏持续更新中:MySQL详解 一、间隙锁概念 当我们用范围条件而不是相等条件检索数据, 并请求共享或排他锁时,InnoDB 会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录...)问题 间隙锁专用于串行化隔离级别,可解决幻读问题,幻读问题表现为:当前事务没做操作,前后两次相同的查询语句,显示的数据量不一致 我们把事务2 select的指定的条件分为2类:范围查询、等值查询 record...测试间隙锁范围加锁 设置事务为手动提交,然后把隔离级别设置成串行化 查看表结构,id、age、name都有索引 场景1:用不可重复的主键id测试间隙锁 范围查询 事务2的select操作只给三行数据加了共享锁,为什么插入...stu where age>14后,辅助索引树加锁区间如下: 场景3:实际情况需要具体分析用的到底是行锁还是表锁 回滚,重新开启事务 开始测试 我们发现事务1无论是插入age>18范围内的数据,还是范围的数据...,都无法成功 这时我们就要分析了,这应该没有用到索引,因为我们用索引,过滤出的数据占了整张表的一大半,MySQL server没使用索引。

    1.1K20

    史上最简单MySQL教程详解(基础篇)之多表联合查询

    常用术语 表连接的方式 数据准备 student表 college表 内连接 连接 左连接 右连接 注意事项: 自连接 子查询 ---- 在上篇文章史上最简单MySQL教程详解(基础篇)之数据库设计范式及应用举例我们介绍过...常用术语 冗余(Redundancy):存储两次数据,以便使系统更快速。 主键(Primary Key):主键是唯一的。同一张表中不允许出现同样两个键值。一个键值只对应着一行。...,只取得键值一致的,可以获取双方表中的数据连接方式。...FROM 表1 INNER JOIN 表2 ON 表1.键=表2.主键 WhERE 条件语句; 运行结果: mysql> SELECT student.name,college.collegeName...左连接 左连接是以左表为标准,只查询在左边表中存在的数据,当然需要两个表中的键值一致。

    53600

    数据库中的面试题你能接几招

    ,但是为什么呢? ​...首先,这个非聚集索引表示的是用户幸运数字的索引(为什么是幸运数字?一时兴起想起来的:-)),此时表结构是这样的。...如何显示的给innodb添加读写锁 select… lock in share mode; select …for update; 7....那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。...10. mysql中的数据库引用有哪几种 MyISAM: 不支持键; 表锁,插入数据时锁整个表,查表总行数时,不需要全表扫描 Innodb: 支持键,行锁, 查表总行数时,全表扫描 11.

    48520

    快问快答,MySQL面试夺命20问

    (6)key 列:这一列显示 mysql 实际采用哪个索引来优化对该表的访问。 (7)key_len 列:显示mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。...(9)rows 列:这一列是 mysql 估计要读取并检测的行数,注意这个不是结果集里的行数。 (10)Extra 列:显示额外信息。...可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数,为什么不是普通二叉树,为什么不是平衡二叉树,为什么不是B树,而偏偏是 B+ 树呢?...(3)为什么不是 B 树而是 B+ 树呢? B+ 树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。...事务A查询一个范围的结果集,另一个并发事务B往这个范围中插入/删除了数据,并静悄悄地提交,然后事务A再次查询相同的范围,两次读取得到的结果集不一样了,这就是幻读。

    95020

    MySQL系列 | 索引数据结构大全

    所有叶子节点均在同一层、叶子节点除了包含关键字和关键字记录的指针也有指向其子节点的指针,只不过其指针地址都为 null 。 ? 另外,它们相同的点是节点数据也是按照左小右大的顺序排列。...MyISAM 和 InnoDB 索引组织的区别 在 MYSQL 中索引属于存储引级别的概念,存储引擎不同,索引的实现方式也不一样。...二级索引(非主键索引) 二级索引就是指除了主键索引的索引。...那么对于二级索引查找一条数据索要做的操作就是: 首先在二级索引中找到叶子节点对应的数据主键值; 根据这个主键值去聚集索引中找到真正对应的数据行。 所以这里需要两次 B+ Tree 查找。...而关于联合索引的建立和使用,从工作开始你的各位 “师长” 都在教导你要遵循 “左前匹配原则”,那到底是为什么呢?什么是左前匹配原则呢?

    1.3K30

    100道MySQL数据库经典面试题解析(收藏版)

    为什么不是B树而是B+树呢? 1)B+树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。...假设链接了两次,每次做上百万次的数据集查询,查完就走,这样就只做了两次;相反建立了上百万次链接,申请链接释放反复重复,这样系统就受不了了。...B+树非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。...为什么要使用视图?什么是视图? 为什么要使用视图? 为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。 什么是视图?...字符串所占空间是一样的,后者在排序时会消耗更多内存 72. mysql中int(20)和char(20)以及varchar(20)的区别 int(20) 表示字段是int类型,显示长度是 20 char

    2.5K20

    不懂就问,MySQL索引是啥?

    另外B+树的阶数是等于它的键值数量的,如果一个节点存储1000键值的话,那么只需要三层就可存储10亿数据,所以一般查找10亿数据只需两次磁盘I/O即可(妙啊)。...同时B+树叶节点的数据是按顺序进行排列的,所以B+树适合范围查找、排序查找和分组查找等(B各数据分散在节点上,相对就困难),也就是为什么MySQL采用B+树索引的原因了。...在InnoDB中处了主键索引其他索引都可以称为辅助索引或二级索引。 MySQL中的MyISAM使用的就是非聚集索引。...再扩展一下为什么MyISAM查询比InnoDB快? InnoDB要缓存数据和索引;MyISAM只缓存索引,换进换出的减少。...依赖外部查询的子查询中的第一个查询DERIVED用到派生表的查询MATERIALIZED被物化的子查询UNCACHEABLE SUBQUERY子查询结果不能被缓存,必须重新评估外层查询的每一行 type(显示这一行的数据是关于哪张表的

    1.3K20

    面试系列-innodb聚簇索引及非聚簇索引

    辅助索引叶子节点存储的不再是行的物理位置,而是主键值。通过辅助索引首先找到的是主键值,再通过主键值找到数据行的数据页,再通过数据页中的Page Directory找到数据行。...Innodb辅助索引的叶子节点并不包含行记录的全部数据,叶子节点除了包含键值,还包含了相应行数据的聚簇索引键。辅助索引的存在不影响数据在聚簇索引中的组织,所以一张表可以有多个辅助索引。...主键是唯一的,根据这个唯一的索引,MySQL 就能确定搜索的记录。 但当我们使用 k 这个索引来查询 k = 2 的记录时就要用到回表。...这个过程虽然用了索引,但实际上底层进行了两次索引查询,这个过程就称为回表。 也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。...我这里表里的数据量比较少,如果数据量大的话,你能很明显的看出两次查询所用的时间,很明显使用主键查询效率更高。

    75330

    MySQL优化

    慢查询语句 慢查询:10s无返回结果,定义为慢查询 SHOW STATUS LIKE "slow_queries"; SHOW VARIABLES LIKE "long_query_time";//可以显示当前慢查询时间...二叉查找树ADT Tree 左子树的键值小于根的键值,右子树的键值大于根的键值。 平衡二叉树AVL Tree 在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。...【如果节点大小和BTree大小不对齐,那么同一页节点可能需要两次IO读取】 综上所述,用B-Tree作为索引结构效率是非常高的。 为什么B+Tree比BTree更适合作为索引结构?...【比如查询50到100的记录,查出50后,顺着指针遍历即可】 为什么不使用Hash索引而使用B+Tree索引? Hash索引本质上是Hash表,是一种KV键值对的存储结构。 无法提高区间访问速度。...为什么???聚簇索引已经查到整行数据了,而非聚簇索引还可能根据主键值再进行查询一次。 例外:覆盖索引——数据直接从索引中取得。

    1K40

    B+Tree索引原理

    索引目的 提高查询效率 【类比字典和借书】 如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。...二叉查找树ADT Tree 左子树的键值小于根的键值,右子树的键值大于根的键值。 平衡二叉树AVL Tree 在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。...【如果节点大小和BTree大小不对齐,那么同一页节点可能需要两次IO读取】 综上所述,用B-Tree作为索引结构效率是非常高的。 为什么B+Tree比BTree更适合作为索引结构?...【比如查询50到100的记录,查出50后,顺着指针遍历即可】 为什么不使用Hash索引而使用B+Tree索引? Hash索引本质上是Hash表,是一种KV键值对的存储结构。 无法提高区间访问速度。...为什么???聚簇索引已经查到整行数据了,而非聚簇索引还可能根据主键值再进行查询一次。 例外:覆盖索引——数据直接从索引中取得。

    1K30

    3分钟速读原著《高性能MySQL》(一)

    操作前后数据总量不会改变 隔离性(Isolation):事务之间互不干扰 持久性(Durability):操作将永久改变 2.没有事务将产生的问题 2.1 脏读:读取了其它操作中未提交的数据 2.2 不可重复读:两次查询结果不一致...,由于更新导致 2.3 幻读:两次查询结果不一致,由于新增或者删除导致 3.MySQL的隔离级别 Serializable (串行化):可避免脏读、不可重复读、幻读的发生 Repeatable read...支持全文索引和空间索引 2.InnoDB 支持事务 支持行锁和键约束,因此可以支持写并发 不存储总行数,执行select count(*) from table效率比MyISAM低 对于AUTO_INCREMENT...引擎的表分成三个文件存储数据,但是InnoDB可以只存储在一个文件内,也可以存储在多个文件内 主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值...已经遗弃的特性,例如浮点数的精度,或者整数的显示宽度 4.2 尽量使用整型定义标识列

    81110

    2024全网最全面及最新且最为详细的网络安全技巧四 之 sql注入以及mysql绕过技巧 (2)———— 作者:LJS

    还是按照下表进行实验 首先我们在查询的时候是可以使用as用其他的名字代替显示的: 但是在实际中可以缺省as直接查询,显示的结果是一样的: 然后就可以用group by函数进行分组,并按照x进行排序 注意...:最后x这列中显示的每一类只有一次,前面的a的是第一次出现的id值 4.count(*)函数 count(*)统计结果的记录数。...最重要的是前面几条记录查询后不能让虚表存在0,1键值,如果存在了,那无论多少条记录,也都没办法报错,因为floor(rand()2)不会再被计算做为虚表的键值,这也就是为什么不加随机因子有时候会报错,有时候不会报错的原因...0x04 漏洞成因 那么,字符集转换为什么会导致%c2被忽略呢? 说一下我的想法,Mysql在转换字符集的时候,将不完整的字符给忽略了。...那前两次为什么没有抛出错误?因为前两次输入的编码并不完整,Mysql在进行编码转换时,就将其忽略了。

    8610

    当规模到亿级,MySQL是一个更好的NoSQL!

    MySQL是一个更好的NoSQL数据库。当考虑到NoSQL的使用案例,比如对Key/Value键值存储来讲,MySQL在性能、易用性和稳定性方面更有意义。...这篇文章会解释给大家为什么我们发现MySQL对于键值存储场景来说,比大多数专有NoSQL引擎还要好。另外,本文也会提供给大家在MySQL中如此应用的参考。...继续使用这一模型,我们可能会有每张表的串行键、键以及在路由表中对于URL列的索引。...上面的结果显示,平均延迟在1毫秒以下,并且在高流量和高更新率的情况下能保证一致性。虽然没有使用事务,但是update却是半事务的。...在Wix,MySQL是我们的键值存储场景的选择是因为操作简单、使用简单,并 且MySQL本身有极好的生态。

    1.2K10

    【建议收藏】MySQL 三万字精华总结 —索引(二)

    四、索引 ❝ 说说你对 MySQL 索引的理解? 数据库索引的原理,为什么要用 B+树,为什么不用二叉树? 聚集索引与非聚集索引的区别? InnoDB引擎中的索引策略,了解过吗?...聚簇索引/非聚簇索引,mysql索引底层实现,为什么不用B-tree,为什么不用hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方?...因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段, 都会调整因为更新所带来的键值变化后的索引信息 MySQL索引分类 数据结构角度 B+树索引 Hash...❝ 为什么非主键索引结构叶子节点存储的是主键值?...判断标准 使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询 发布者:全栈程序员栈长

    55430

    【建议收藏】MySQL 三万字精华总结 —索引(二)

    四、索引 ❝说说你对 MySQL 索引的理解? 数据库索引的原理,为什么要用 B+树,为什么不用二叉树? 聚集索引与非聚集索引的区别? InnoDB引擎中的索引策略,了解过吗?...聚簇索引/非聚簇索引,mysql索引底层实现,为什么不用B-tree,为什么不用hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方?...因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段, 都会调整因为更新所带来的键值变化后的索引信息 MySQL索引分类 数据结构角度 B+树索引 Hash索引 Full-Text...❝为什么非主键索引结构叶子节点存储的是主键值?...判断标准 使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询

    58120
    领券