如何在 MariaDB 或 MySQL 中创建文本类型的外键?

2024-06-28

我有两张桌子:

CREATE TABLE first_table(
my_id TEXT(6) NOT NULL,
content VARCHAR(30) NOT NULL,
PRIMARY KEY(my_id(6))
) Engine=InnoDB charset utf8mb4 collate utf8mb4_general_ci;

CREATE TABLE second_table(
another_id TEXT(6) NOT NULL,
my_id TEXT(6) NOT NULL,
another_content VARCHAR(30) NOT NULL,
PRIMARY KEY(another_id(6))
) Engine=InnoDB charset utf8mb4 collate utf8mb4_general_ci;

但在第二个表中,我无法创建引用第一个表的外键,首先我尝试了以下操作:

ALTER TABLE second_table
ADD FOREIGN KEY (my_id)
REFERENCES first_table(my_id)
ON DELETE CASCADE ON UPDATE CASCADE;

并得到这个错误:

ERROR 1170 (42000): BLOB/TEXT column 'my_id' used in key specification without a key length
MariaDB [base_ventas]>

因此,我尝试像这样指定密钥长度:

ALTER TABLE second_table
ADD FOREIGN KEY (my_id(6))
REFERENCES first_table(my_id)
ON DELETE CASCADE ON UPDATE CASCADE;

我得到了这个错误:

ERROR 1005 (HY000): Can't create table `base_ventas`.`#sql-1a08_23c` 
(errno: 150 "Foreign key constraint is incorrectly formed")

数字 id 不会发生这种情况,但我需要有字符串类型 id,这是可以完成的,或者我遗漏了一些东西?


很遗憾地通知您,这是不可能的。

根据MySql 文档 https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html:

不支持外键列上的索引前缀。一 这样做的结果是不能包含 BLOB 和 TEXT 列 在外键中,因为这些列上的索引必须始终包含 前缀长度。

And MariaDB 文档 https://mariadb.com/kb/en/library/foreign-keys/:

子表中的列必须是索引,或者最左边的部分 的一个索引。不支持索引前缀(因此,TEXT 和 BLOB 列不能用作外键)

如果您确实需要字母数字键,请考虑使用 char 或 varchar 之类的键。最简单、最通用、最常见的方法是使用数字键,例如 INT。

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

如何在 MariaDB 或 MySQL 中创建文本类型的外键? 的相关文章

  • 从条件表中获取 WHERE 子句的条件

    我创建了以下简单的DataModel 我用以下数据填充了表格 1 桌子Customer INSERT INTO test customer CustomerName Country RegistrationDate VALUES Custo
  • 如何在数据库中存储世界各地的所有地理位置?

    我在一家旅游网站工作 我需要存储游客去过的旅游景点 我需要位置表中的地点是唯一的 以便我可以知道特定地点的受欢迎程度等 我还需要存储在我身边的所有国家 州 城市 因为我不能依赖用户输入 数据库是MySQL 看到这些位置的可用数据集 我发现存
  • excel vba - 在电子表格上查询

    如果我有这两张表 is there some sort of excel vba code using ADO that could acheive these desired results which could utilise any
  • android php 连接错误? (添加java代码)

    我试图从 android 应用程序获取位置 纬度 经度 并使用 php 插入数据库 然后提取 10m 半径内的数据 问题是 当我使用智能手机测试代码时 本地测试正常 数据未正确插入 表 usergps 有 3 列 名称 纬度 经度 在我测试
  • 如果值不为空,则更新数据库的 SQL 查询?

    我有一个大约有 17 个字段的表 我需要在此表中执行频繁更新 但问题是每次我可能只更新几个字段 在这种情况下编写更新查询的最佳方法是什么 我正在寻找一个选项 其中仅当值不为空时才会更新 例如 我在数据库中有四个字段 A B C D 用户更新
  • 如何在 SQL Server 中引用触发器的“新”、“旧”行?

    所以我是 SQLite 的 SQL Server 新手 我习惯使用 New Old 关键字 我看到有些人使用insertedvalue 引用新创建的行 但这仅适用于插入而不适用于更新 我能得到类似的东西吗New我在这个查询中使用 creat
  • 将 mysql 连接传递给 python 线程时管道损坏

    我正在尝试将 mysql 连接传递给 python 中的线程 如果我在工作类中进行 mysql 的初始化 则不会出现错误 但是 连接的成本可能很高 因此我尝试仅从调用者函数传递 mysql 连接 请参见下面的代码 但这一直抛出这个错误 20
  • mysql数据库的“零知识”加密

    我一直在研究 Web 应用程序数据库层的加密 它使用MySQL 5 1 或更高版本 我记不清了 该应用程序由我的组织管理 为公共客户存储数据 最简单的选择是 AES ENCRYPT AES DECRYPT 如果坏人以某种方式访问 我的数据库
  • 如何重新排列 MySQL 列?

    我需要移动现有列的位置 以获得更好的可见性 如何在不影响数据的情况下完成此操作 Modify https stackoverflow com a 14767467 819417也有效 看一看 ALTER TABLE table name M
  • 行入列并分组

    我有一个如下所示的查询 SELECT OrganizationName OrganizationID ReceivableStatus InvoiceFee FROM v InvoicesFreelanceOutstanding ORDER
  • 有人知道一个像样的免费数据库模式逆向工程工具吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 寻找一种工具 可以自动从实时数据库创建 MySQL 数据库模式的图形表示 显示表 列和关系 ER 图 理想情况下 在 OS X 上运行的东
  • Codeigniter Cart - 将数据保存在数据库中 - 如何处理?

    我需要帮助在我的网络应用程序中处理订单和购物车 我决定使用 Codeigniter 2 中内置的 Cart 库 我看过一些关于 Cart 库的教程 我知道如何使用它 但我不知道 我什么时候应该在数据库中创建 保存该订单 当用户将商品添加到购
  • 缓慢变化的维度 - 什么是 Pure type 6 实现

    我试图理解纯类型 6 SCD 实现WIKI http en wikipedia org wiki Slowly changing dimension主要说了三点 如果维度可能发生变化 每个时间片都有一个类型 2 代理键可能会导致问题 纯 T
  • 用 rand mysql 替换 order

    有没有等价物order by rand Sandro 的链接解释了原因ORDER BY RAND 很糟糕 它没有给出真正的解决方案 你应该尝试阅读这篇文章 http jan kneschke de projects mysql order
  • 两个sql查询的性能差异?

    我的表中有一个具有文本数据类型的字段 以下两个sql查询的性能是否有差异 select from tablename where fieldname xyz select from tablename where fieldname zyx
  • 导出数据库的 CREATE 脚本

    假设我已经在 pgAdmin 中创建了一个数据库 但我想导出一个 CREATE sql 文件 我将如何生成转储 以下是如何使用 pgAdmin 创建一个架构脚本 该脚本可以与 PostgreSql 数据库架构比较工具 例如apgdiff h
  • QSqlDatabasePrivate::removeDatabase:连接“myConnectionName”仍在使用中,所有查询将停止工作

    我有一个文件夹 里面有很多数据库 有时可能会删除或添加数据库到该文件夹 所以我使用 QTimer 并读取所有数据库 这是我的代码 this gt timer new QTimer this this gt timer gt setInter
  • JOOQ初始化DAO最佳方法

    我想知道初始化 JOOQ 生成 DAO 的最佳实践 现在 我使用以下方法来初始化 JOOQ 生成的 DAO 在以下情况下 Student Dao 是 JOOQ 生成的 public class ExtendedStudentDAO exte
  • SELECT MySQL 字段包含子字符串[重复]

    这个问题在这里已经有答案了 使用 LIKE 在 MySQL 中非常常见 我们这样使用它 WHERE field LIKE substring 我们有一个子字符串 并且字段有完整的字符串 但我需要的是相反的东西 我在字段中有子字符串 所以 我
  • JavaFX ComboBox - 显示文本但在选择时返回 ID

    我有一个包含机场的数据库表 每个机场都有一个名称和一个 ID 在 JavaFX 中我有一个表单 其中包含ComboBox 组合框需要显示所有机场名称 并且在提交表单时需要将机场的 ID 插入数据库 而不是其名称 但我并没有真正弄清楚解决方案

随机推荐

  • 在空心方形层内生成随机均匀分布点的 Pythonic 方法

    假设我们有一个尺寸为 n 的空心方形薄片 也就是说 我们有一个 nxn 正方形 其中删除了 k l 矩形 1 我为 numpy 编写了这段代码 但它至少有 2 个问题 我必须丢弃大约 1 9 的所有生成点 并且删除 numpy array
  • 如何将 C 静态库公开到 .Net?

    将 C 函数公开给 C 和 Net 有哪些步骤 我想在 C C 和 Net 中为 32 位和 64 位构建使用相同的函数名称 我发布这个问题和答案是因为我没有在任何地方找到这些技术的记录 步骤是 将 C 函数公开为 C 静态库 lib Us
  • 将所有 PHP 错误输出到数据库而不是 error_log

    是否可以将所有 PHP 错误写入 MySQL 而不是标准的 error log 文件 我想如果我从头开始编写自己的错误处理程序 这是可能的 但我有很多遗留代码 理想情况下我只需进行 1 个全局更改即可 这可以做到吗 我认为如果不构建自己的错
  • 在托管代码中,如何实现良好的引用局部性?

    由于RAM似乎是新磁盘 http www infoq com news 2008 06 ram is disk 并且由于该声明还意味着现在对内存的访问被认为是缓慢的 类似于磁盘访问一直以来的情况 因此我确实希望最大化高性能应用程序的内存中的
  • 用于添加外部链接的 Vim 插件

    现在 这可能是显而易见的事情 已经解决并为每个人所知 但我只是想到了它 所以怜悯 Is there a Vim plugin for when writing markdown texts that enables you to inser
  • python 线程:内存模型和可见性

    python 线程是否会像 Java 一样暴露内存可见性和语句重新排序的问题 由于我找不到任何对 Python 内存模型 或类似内容的引用 尽管事实上很多人都在编写多线程 Python 代码 但我猜测这些陷阱在这里不存在 不volatile
  • 如何检查用户输入的数字不大于 LLONG_MAX 或低于 LLONG_MIN?

    我想检查用户输入的数字是否大于或小于告知值 我知道关于环礁功能 http en cppreference com w c string byte atoi但它似乎没有特别帮助 基于未定义值的检查看起来不太令人信服 我还知道我可以检查用户输入
  • QML 缩放不适用于非整数缩放因子

    我正在使用 QML 编写一个应用程序 当我按非整数因子缩放 GUI 时遇到麻烦 根据文档 https doc qt io qt 5 highdpi html Qt AA EnableHighDpiScaling应该启用与设备无关的像素 因此
  • HTML5 全屏 Web 应用程序:没有浏览器栏

    我正在为移动设备创建 HTML5 Web 应用程序 并被要求隐藏浏览器导航栏 后退和前进按钮 前面这里有错字 我怎样才能做到这一点 我想我应该能够使用 Phone Gap 来实现这一目标 但我想知道 普通 网络应用程序是否有可能隐藏浏览器栏
  • gitignore 中的文件

    我在生产服务器中有一个带有 Rails 应用程序的存储库 在存储库中有 gitignore 文件 config database yaml 每个开发客户端都有一个具有不同 config database yaml 的克隆存储库 我的问题是这
  • 有谁知道有一个很好的库可以将一个人的名字映射到他或她的性别吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在寻找一个图书馆或数据库 可以根据一个人的名字或昵称猜测他或她是男性还是女性 就像是 john gt M mary gt F al
  • Spring Boot Rest API @RequestBody 中的 @Valid 与 @Validated [重复]

    这个问题在这里已经有答案了 我拥有开发 REST API 的 NET 背景 现在使用 spring boot 从事 java REST 项目 首先 我在控制器 RequestBody 上的验证停止工作 在尝试修复它时 我看到了不同的实施方法
  • TypeORM:将不相关的实体映射到数组属性中

    我有以下内容无关TypeORM 实体 由于各种原因 我不能在它们上使用一对多关系 Entity export class Book PrimaryGeneratedColumn id number Column name string En
  • 将 python 字节类型更改为字符串

    我正在使用 python 来使用 stackoverflow API 我运行以下命令 f urllib request urlopen http api stackoverflow com 1 0 stats d f read d 的类型是
  • Swift 中可选的闭包属性

    如何在 Swift 中将可选闭包声明为属性 我正在使用这段代码 var respondToButton sender UIButton gt Bool 但编译器抱怨该属性未在初始化程序结束时初始化 我相信我可以通过将 var 声明为可选来解
  • Cordova Ionic:启用 Android 表情符号软键盘

    使用 Cordova Ionic Android 您可以通过以下方式调用搜索键盘
  • 具有包含布局的数据绑定变量继承

    我正在学习数据绑定和 mvvm 我有一个问题 我想要一个BaseViewModel kt包含一些与 UI 相关的变量 例如isLoading旗帜和loadingText 当发出网络请求时 我设置isLoading为 true 并且我的基本视
  • 错误CS2001:找不到源文件“.cs”[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 当我尝试构建时 我的项目出现以下错误 错误 CS2001 找不到源文件 cs 我故意取出导致此错误的两个文件 因为它们与
  • 是否可以在不使用探查器的情况下跟踪 C# 应用程序中的内存使用情况?

    我想编写一个简单的应用程序来跟踪其当前的内存使用情况 创建的对象数量等 在 C 中 我通常会覆盖 new 运算符 但由于显而易见的原因 我无法在 C 中执行此操作 有没有办法在不使用分析器的情况下做到这一点 您可能想从垃圾收集器开始 MSD
  • 如何在 MariaDB 或 MySQL 中创建文本类型的外键?

    我有两张桌子 CREATE TABLE first table my id TEXT 6 NOT NULL content VARCHAR 30 NOT NULL PRIMARY KEY my id 6 Engine InnoDB char