为什么MySQL无法正确命名我的外键?

尿

请考虑以下我在MySQL 8.0.22(在InnoDB数据库中)中运行的SQL代码:

CREATE TABLE `person` (
  `person_id` smallint unsigned NOT NULL AUTO_INCREMENT, 
  `name` varchar(128) NOT NULL,
  PRIMARY KEY (`person_id`)
);

CREATE TABLE `pet` (
  `pet_id` smallint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  PRIMARY KEY (`pet_id`)
);

ALTER TABLE `pet`
  ADD COLUMN `owner_id` smallint unsigned;

ALTER TABLE `pet`
  ADD CONSTRAINT `fk_pet_person`
  FOREIGN KEY `idx_fk_pet_person` (`owner_id`)
  REFERENCES `person` (`person_id`);

SHOW CREATE TABLE pet;

输出SHOW CREATE TABLE pet为:

CREATE TABLE `pet` (
  `pet_id` smallint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `owner_id` smallint unsigned DEFAULT NULL,
  PRIMARY KEY (`pet_id`),
  KEY `fk_pet_person` (`owner_id`),
  CONSTRAINT `fk_pet_person` FOREIGN KEY (`owner_id`) REFERENCES `person` (`person_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

在上面的输出中,fk_pet_person当我idx_fk_pet_personALTER TABLE命令中指定其名称时,为什么要命名KEY 我怎样才能这样命名呢?

他们不是

您会混淆使它起作用的FOREIGN KEY和INDEX。请注意-在代码中显示的约束定义中没有表达式名称(看起来像索引定义,但看起来没有)。

如果没有合适的索引使约束起作用,则将自动创建此索引,并将约束名称用作索引名称。如果存在合适的索引,则不会发生自动创建。

如果希望索引具有定义的名称,则必须在创建ALTER TABLE约束之前在单独的(子)语句中创建此索引

ALTER TABLE `pet`
  ADD KEY `idx_fk_pet_person` (`owner_id`),
  ADD CONSTRAINT `fk_pet_person`
  FOREIGN KEY (`owner_id`)
  REFERENCES `person` (`person_id`);

要么

ALTER TABLE `pet`
  ADD KEY `idx_fk_pet_person` (`owner_id`);

ALTER TABLE `pet`
  ADD CONSTRAINT `fk_pet_person`
  FOREIGN KEY (`owner_id`)
  REFERENCES `person` (`person_id`);

DEMO

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Mysql重命名我的外键?

来自分类Dev

为什么MySQL不接受我的外键?

来自分类Dev

为什么MySQL不接受我的外键?

来自分类Dev

Django外键的命名,以请求正确的列

来自分类Dev

为什么我的char *无法正确通过?

来自分类Dev

为什么我的json无法正确返回?

来自分类Dev

为什么我的htaccess无法正确重写

来自分类Dev

为什么我的代码无法正确加载?

来自分类Dev

为什么我不能为该列分配外键?

来自分类Dev

为什么mysql的自动添加为外键检查的指标?

来自分类Dev

尝试添加外键时,为什么MYSQL错误?

来自分类Dev

MySQL无法为我的表添加外键约束

来自分类Dev

mySQL:是什么阻止了我的外键约束?

来自分类Dev

我的 mysql 外键约束有什么问题?

来自分类Dev

MySQL-为什么我不能将外键添加到指向一列的多列中?

来自分类Dev

MYSQL无法添加外键

来自分类Dev

无法创建外键mysql

来自分类Dev

为什么我的BufferedReader无法正确读取我的文件?

来自分类Dev

MySQL:为什么我的查询无法完成?

来自分类Dev

MySQL错误:1215无法添加外键-当我将BIGINT用于键类型时

来自分类Dev

为什么我的用户定义的异常无法正确处理?

来自分类Dev

为什么我的材质设计无法正确渲染(Android Studio)?

来自分类Dev

AVFoundation-为什么我无法正确显示视频方向

来自分类Dev

为什么我的子画面无法正确绘制(libgdx)?

来自分类Dev

为什么我的BufferedImage无法正确转换为LWJGL图像?

来自分类Dev

为什么我的UIWebView框架无法正确调整大小?

来自分类Dev

为什么我的Bootstrap输入无法正确对齐?

来自分类Dev

为什么我的DeflateStream无法通过TCP正确接收数据?

来自分类Dev

为什么我的Minimax无法扩展并正确移动?

Related 相关文章

  1. 1

    为什么Mysql重命名我的外键?

  2. 2

    为什么MySQL不接受我的外键?

  3. 3

    为什么MySQL不接受我的外键?

  4. 4

    Django外键的命名,以请求正确的列

  5. 5

    为什么我的char *无法正确通过?

  6. 6

    为什么我的json无法正确返回?

  7. 7

    为什么我的htaccess无法正确重写

  8. 8

    为什么我的代码无法正确加载?

  9. 9

    为什么我不能为该列分配外键?

  10. 10

    为什么mysql的自动添加为外键检查的指标?

  11. 11

    尝试添加外键时,为什么MYSQL错误?

  12. 12

    MySQL无法为我的表添加外键约束

  13. 13

    mySQL:是什么阻止了我的外键约束?

  14. 14

    我的 mysql 外键约束有什么问题?

  15. 15

    MySQL-为什么我不能将外键添加到指向一列的多列中?

  16. 16

    MYSQL无法添加外键

  17. 17

    无法创建外键mysql

  18. 18

    为什么我的BufferedReader无法正确读取我的文件?

  19. 19

    MySQL:为什么我的查询无法完成?

  20. 20

    MySQL错误:1215无法添加外键-当我将BIGINT用于键类型时

  21. 21

    为什么我的用户定义的异常无法正确处理?

  22. 22

    为什么我的材质设计无法正确渲染(Android Studio)?

  23. 23

    AVFoundation-为什么我无法正确显示视频方向

  24. 24

    为什么我的子画面无法正确绘制(libgdx)?

  25. 25

    为什么我的BufferedImage无法正确转换为LWJGL图像?

  26. 26

    为什么我的UIWebView框架无法正确调整大小?

  27. 27

    为什么我的Bootstrap输入无法正确对齐?

  28. 28

    为什么我的DeflateStream无法通过TCP正确接收数据?

  29. 29

    为什么我的Minimax无法扩展并正确移动?

热门标签

归档