首页 > 解决方案 > mysql - 如何在具有不同定义的列上拥有外键

问题描述

我有一个非常奇怪的问题(嗯......不是问题,因为它并没有真正产生任何问题......但是)。在我的一个数据库中,我有一个外键链接具有不同定义的 2 列(INT(10) UNSIGNED 和 INT(11) UNSIGNED)。这可能表明它们是相同的?还是某种奇怪的错误?

在这里您可以看到创建表(直接来自 cli,以前没有客户端可以确定不是客户端错误):

Database changed

mysql> show create table faq;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| faq   | CREATE TABLE `faq` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `section_id` int(11) NOT NULL,
  `question` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
  `url_string` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `answer` text COLLATE utf8_bin NOT NULL,
  `date_created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `section_id` (`section_id`)
) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> show create table faq_questions_tags;
+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table              | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| faq_questions_tags | CREATE TABLE `faq_questions_tags` (
  `id_faq` int(10) unsigned NOT NULL,
  `id_tag` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id_faq`,`id_tag`),
  KEY `faq_tags_tags_id_fk` (`id_tag`),
  CONSTRAINT `faq_tags_faq_id_fk` FOREIGN KEY (`id_faq`) REFERENCES `faq` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `faq_tags_tags_id_fk` FOREIGN KEY (`id_tag`) REFERENCES `faq_tags` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

正如您所看到的 faq_questions_tags.id_faq 引用 faq.id,即使它们具有不同的定义,也不会报告错误/警告。这怎么可能?理论认为它不应该。

标签: mysqlforeign-keys

解决方案


推荐阅读