使用组合键中的一列作为外键

2024-01-22

我试图看看是否可以使用复合键中的一列作为外键。我得到了奇怪的结果。

CREATE TABLE TESTPARENT(
    PK1 INT,
    PK2 INT,
    PRIMARY KEY(PK1,PK2)
);

Query OK, 0 rows affected (0.01 sec)


CREATE TABLE TESTCHILD1(
    FK1 INT, 
    FOREIGN KEY (FK1) REFERENCES TESTPARENT(PK1)
);

Query OK, 0 rows affected (0.01 sec)


CREATE TABLE TESTCHILD2(
    FK2 INT,
    FOREIGN KEY (FK2) REFERENCES TESTPARENT(PK2)
);

ERROR 1005 (HY000): Can't create table 'test.TESTCHILD2' (errno: 150)

MySQL 允许创建仅引用主键中第一列的外键,而不引用第二列。这很奇怪吗?还是我太傻了!


作为 MySQL 文档外键表示 https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html:

InnoDB 允许外键引用任何索引列或列组。但是,在引用的表中,必须有一个索引,其中引用的列以相同的顺序列为第一列。

NDB 要求任何列上有显式唯一键(或主键) 作为外键引用。

所以,如果你使用innodb,那么MySQL不允许你在不是索引最左边字段的字段上创建外键。

原因是在多列索引中,您无法根据非最左边的字段查找值,因此索引不能用于快速查找外键检查的值。

MySQL 索引的这种行为在 MySQL 文档中进行了描述多列索引 http://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html:

如果列不构成索引的最左边前缀,MySQL 就无法使用索引来执行查找。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用组合键中的一列作为外键 的相关文章

  • MySQL,连接两列

    MySQL 表中有两列 SUBJECT and YEAR 我想生成一个字母数字唯一编号 其中包含主题和年份的串联数据 我怎样才能做到这一点 是否可以使用像这样的简单运算符 您可以使用CONCAT http dev mysql com doc
  • 从 Presto 中的 JSON 列获取特定值

    我有一个带有 JSON 列的表points其中一行为 0 0 2 1 1 2 2 0 5 15 1 2 20 0 7 我想获取键的值 1 and 20 并将它们存储为别名 例如first and second在查询中 到目前为止我所做的是
  • 如何在 Ansible 中运行 MySQL 查询

    我需要编写一个 Ansible 脚本来在 MySQL 数据库中执行 SQL 查询 这是我尝试过的 你能指导一下吗 hosts localhost tasks name retrive data command mysql u root h
  • Magento - 无法重新索引产品价格 - 外键约束失败

    我最近刚刚将我的 magento 商店从 1 4 2 升级到 1 7 0 2 升级进行得很顺利 但是当我尝试在升级后重新索引数据时 产品价格失败了 我尝试过使用php shell indexer php reindexall来自 SSH 它
  • 使用 FileTable 通过 SQL INSERT 创建子目录

    之前 我请求如何在一个目录中创建一个目录FileTable不使用文件 I O API https stackoverflow com q 10483906 175679 我现在想为刚刚创建的父目录创建一个子目录 在插入期间如何分配我的父母
  • 条件对列表的 In 子句

    有一个表 我需要通过在配对值列表中应用和条件来获取分页记录 下面是解释 假设我有一堂课Billoflading其中有各个领域 表中两个重要字段是 tenant billtype 我有一个包含值的对列表 tenant1 billtype1 t
  • 如何插入包含“&”的字符串

    如何编写包含 字符的插入语句 例如 如果我想将 J J Construction 插入数据库的列中 我不确定这是否有什么不同 但我正在使用 Oracle 9i 我总是忘记这一点 然后又回到它 我认为最好的答案是迄今为止提供的答复的组合 首先
  • 如何在没有 DROP 数据库权限的情况下从命令行删除所有 MySQL 表? [复制]

    这个问题在这里已经有答案了 如何使用命令提示符删除 Windows MySQL 中的所有表 我想这样做的原因是我们的用户有权访问数据库删除 但无权重新创建数据库本身 因此我们必须手动删除表 有没有办法一次删除所有表 请记住 大多数表都与外键
  • 将自动递增值添加到只有一列的表中

    我需要创建一个基本上仅保留索引列表的表 因此 我创建了一个只有一个名为 id 的自动递增列的表 但是 我似乎无法隐式地将自动递增值添加到该表中 我知道通常当您在表中有这样一列 不仅仅是此列 时 您可以执行以下操作 插入表 col1 col2
  • java.lang.NoSuchMethodError:没有虚拟方法 setTag(Ljava/lang/Object;)

    我刚刚完成使用登录和注册屏幕与齐射的代码 但在模拟器中运行时我收到此错误 java lang NoSuchMethodError No virtual method setTag Ljava lang Object Lcom android
  • 我们可以使用sql列出MS Access数据库中的所有表吗?

    我们可以使用 sql 找到 ms access 中的所有表吗 就像我们在 sql server 中所做的那样 select from sys tables 在sqlite中 SELECT FROM sqlite master where t
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • 具有“日期之间”的 CakePHP 模型

    我有一个很大的数据集 超过十亿行 数据在数据库中按日期分区 因此 我的查询工具必须在每个查询上指定一个 SQL Between 子句 否则它将必须扫描每个分区 而且 它会在返回之前超时 所以 我的问题是 分区的数据库中的字段是日期 使用 C
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • Postgres 按查询分组

    我正在尝试在 postgres 的查询中使用 group by 我无法让它按照我想要的方式工作 以便根据需要对结果进行分组 这是另一个堆栈问题的扩展我刚刚回答过的递归查询 https stackoverflow com questions
  • 在 Oracle 中如何将多行组合成逗号分隔的列表? [复制]

    这个问题在这里已经有答案了 我有一个简单的查询 select from countries 结果如下 country name Albania Andorra Antigua 我想在一行中返回结果 如下所示 Albania Andorra
  • parent_id 是外键(自引用)并且为 null?

    浏览 Bill Karwin 的书 SQL Antipatterns 第 3 章 Naive Trees 邻接表 父子关系 有一个注释表的示例 CREATE TABLE Comments comment id SERIAL PRIMARY
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI
  • 如何关闭整个数据库的区分大小写

    我创建了一个包含许多脚本和许多存储过程的数据库 在这个数据库中 我们没有注意担心区分大小写 因为它对于我的本地开发计算机来说是关闭的 综上所述 我试图弄清楚如何使以下两条语句返回相同的结果 SELECT FROM companies SEL
  • 错误 1305 (42000):保存点...不存在

    我的 MYSQL 数据库中有这个 SQL 存储过程为空 所以我猜没有隐式提交 DROP PROCEDURE IF EXISTS doOrder DELIMITER CREATE PROCEDURE doOrder IN orderUUID

随机推荐

  • Html显示格式化文本

    我必须在 html 页面上显示一堆文本 文本看起来像这样 001 This is a Line 00 12 04 002 003 Everthing looks good so far 文本是 预先格式化的 包含大量空格和破折号 每行都具有
  • JQuery 到 asmx 在 Windows 2008 R2 SP1 上失败

    自从安装 SP1 以来 我们在从 JQuery 客户端代码调用 asmx 页面时遇到了问题 IIS 将 JQuery post 调用指向他的默认 404 页面 我们对环境进行了角色恢复 断言此问题是由 SP1 引起的 并且测试证实了这一点
  • mongodb-java POJO不返回id

    我是 MongoDB 的新手 在这里有点疯狂 我正在使用最新的 mongo java driver 版本和 dropwizard 我使用 POJO 写入 DDBB 它有效 但是 当尝试获取元素时 我没有得到实际的 id 这是我尝试过的 DD
  • 如何在数字的最后三位数字之前插入小数点?

    我有一个数字 需要添加小数以进行格式化 该数字保证在 1000 到 999999 之间 我已经以其他方式介绍了其他可能性 这是我无法理解的 我需要在最后 3 位数字之前添加小数 例如 1000 gt 1 000 23513 gt 23 51
  • 我可以向 HTML 标记添加自定义属性吗?

    我可以向 HTML 标记添加自定义属性吗 如下所示
  • 在 Google App Engine 中创建表单自动完成

    我想为标签字段构建一个自动完成功能 就像 App Engine 上的 SO 一样 知道我应该如何进行这个过程吗 服务器端算法 自动完成应该有什么逻辑 应用程序引擎实施 数据存储架构应该是什么 嘿 几天前我就遇到了这个问题 只要您有想要搜索的
  • 如何在 ASP.Net Core Razor 页面中返回带有模型的页面

    如何重定向到页面并传递其模型 就像我们在 MVC 中所做的那样return View model MyModel 我尝试过的 return RedirectToPage Notify new Model notifierVM 注意 我要返回
  • 如何立即关闭 C 程序?

    我正在编写 C 代码 在其中分析一些数据 我已将程序设置为仅处理 100 个数据输入 当输入超过 100 个时 就会出现分段错误 我想创建一种方法 以便当输入数量超过 100 时 用户将收到警告并且程序将终止 我知道如何从主要功能中简单地做
  • MyGroups 未在 Communicator.UIAutomation 中实现

    我正在开发一个浏览器外的 Silverlight 应用程序 它提供了一些 MS Office Communicator 2007 控件 我正在使用 与 SDK 一起安装的文档指出 IMessenger2 界面中有一个 MyGroups 属性
  • 测试 swift 异步函数超时

    如何编写一个单元测试来检查异步函数是否不会超时 我正在尝试常规XCTestExpectation 但是因为await暂停一切 是等不到期待 在下面的代码中 我正在检查loader perform 执行时间不超过1秒 func testLoa
  • 在 KnockoutJS 中获取可观察的多维数组(对象)

    我正在使用 Knockout 构建一个应用程序 发现它非常有用 虽然 我在获取多维数组 对象 可观察时遇到问题 目前我正在使用以下结构 self form ko observableArray ko utils arrayMap initi
  • /bin/sh: python: 找不到命令

    我刚刚安装了 Python3 和 Komodo 我正在尝试运行一个简单的脚本 但收到 py 命令未找到的错误 我对 Komodo 和 Python 都是新手 所以不知道该去哪里寻找 我看到另一篇文章也有同样的问题 但没有提供有帮助的解决方案
  • 虚拟继承的内部机制

    C 示例代码 class A public A int class B public virtual A public B int b A b class C virtual public A public C int c A c clas
  • 在 jQuery Mobile 中的 Ajax 调用上显示页面加载微调器

    我正在使用 ajax 填充我的移动网络应用程序中的列表 我想做的是让 jQuery 移动加载微调器在执行此调用时出现 并在列表填充后消失 当前版本的 JQM 使用 mobile showPageLoadingMsg and mobile h
  • 如何使操作栏图标在单击时发生变化

    我在 Sherlock ActionBar 中有一组紫色背景的白色图标 我想让它们在被点击时变成深紫色 我有相同的深紫色图标 所以我想让这些可绘制对象显示在按下状态 现在 我知道如何在整个应用程序主题中执行此操作 但这意味着我必须对所有图标
  • 阻止本地网站在 Chrome 上强制使用 HTTPS?

    Chrome 已更新为在某些保留的域名上强制使用 HTTPS 不幸的是我的本地计算机之一出现在列表中 我的机器名称是 dev Chrome 现在自动重定向 http dev http dev 到 https dev https dev 我在
  • Java获取本地IP [重复]

    这个问题在这里已经有答案了 我正在尝试获取本地IP 它应该与 System out println Inet4Address getLocalHost getHostAddress or InetAddress addr InetAddre
  • jquery map函数对表的使用

    我有这张表 table thead tr th UtstyrsID th th Navn th th Utlevert th th Kommentar th tr thead tbody tr td 1 td tr tbody table
  • Java - 帮助在任意锚点绘制文本的最佳库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我熟悉如何使用各种 FontMetrics 函数使文本垂直 水平居中等 但是 我正在寻找一个支持在相对
  • 使用组合键中的一列作为外键

    我试图看看是否可以使用复合键中的一列作为外键 我得到了奇怪的结果 CREATE TABLE TESTPARENT PK1 INT PK2 INT PRIMARY KEY PK1 PK2 Query OK 0 rows affected 0