mysql - 在非主键之间创建外键关系时出错
问题描述
我有两张桌子
CREATE TABLE `abc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref_id` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ref_id_UNIQUE` (`ref_id`)
)
CREATE TABLE `xyz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref_id` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ref_id_UNIQUE` (`ref_id`)
)
我想在 xyz 的 ref_id 和 abc 的 ref_id 之间建立外键关系。但是 Mysql 给出了错误 1215。
解决方案
您应该与主键建立外键关系。我知道 MySQL 允许与索引的任何内容建立外键关系。但正确的做法是使用主键。
所以像这样声明表:
CREATE TABLE `xyz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
abc_id int DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ref_id_UNIQUE` (`abc_id`),
ADD CONSTRAINT fk_xyz_abc FOREIGN KEY (abc_id) REFERENCES abc(id)
);
如果您想要一行,则使用来ref_id
获取信息。xyz
JOIN
推荐阅读
- php - JQuery Click() 没有触发 laravel Blade for 循环添加的项目
- sparse-matrix - 有限元预处理器
- laravel - 访问令牌的 Guzzle 问题
- python - AutoField 应该存在但它不是(django)?
- node.js - 如何在 mongodb 3.2 中从集合中添加多个文档
- android - Android Studio Emulator 中的应用程序无法在真实设备上运行
- python - 如何在现有列表中存储随机数
- javascript - useState 从 react 导入但错误用作组件
- python - Django Serializer - 如何知道错误输入了哪些参数
- android - 将整个捆绑(对象)本身从某个活动的片段传递和接收到另一个活动