我正在创建两个表,在其中一个表中我试图分配一个外键,但它给了我一个错误
Posted
技术标签:
【中文标题】我正在创建两个表,在其中一个表中我试图分配一个外键,但它给了我一个错误【英文标题】:I am Creating two tables and in one of the tables I am trying to assign a foreign key but it is giving me an error 【发布时间】:2021-11-28 19:15:23 【问题描述】:我正在创建两个表,一个平台表和一个游戏表,我收到一条错误消息,说它在 sql 语句中找不到 PLATFORMID,但我不明白为什么
Column "PLATFORMID" not found; SQL statement: CREATE TABLE game( gameId LONG PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), publisher VARCHAR(255), platform VARCHAR(255), price DECIMAL(4,2), FOREIGN KEY (platformId) REFERENCES Platforms(platformId) ) [42122-200]
这是我创建表格的代码
CREATE TABLE Platforms(
platformId LONG PRIMARY KEY AUTO_INCREMENT,
platformName VARCHAR(255)
);
CREATE TABLE game(
gameId LONG PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), publisher VARCHAR(255), platform VARCHAR(255), price DECIMAL(4,2),
FOREIGN KEY (platformId) REFERENCES Platforms(platformId)
);
【问题讨论】:
您尚未在引用表中声明 platformid 列。 PS 对于编译器错误,请尽可能减少代码,直到确定并添加回来。阅读语法和手册。显示组成子表达式是可以的。 minimal reproducible example 【参考方案1】:错误是因为在game
表中找不到platformId
引用。
需要注意的几点:
LONG
数据类型是MEDIUMTEXT
的别名,肯定不会有AUTO_INCREMENT
?我在按原样使用时遇到错误。
当您执行FOREIGN KEY (platformId)
时,此部分引用当前表 中的列,然后该列引用的另一个表是:REFERENCES Platforms(platformId)
部分。
当前表中外键的(column)
引用必须有索引。
了解两个表中外键的列引用必须具有相同的数据类型,包括签名(如果指定),这一点至关重要。 (例如,如果一列有无符号,那么另一列也需要无符号)
所以,知道这些事情,在下面的例子中:
-
我已将两个表中的
LONG
替换为 INT(11) unsigned
。
在game
表中为platformId
添加了一列
同时为game
表中的platformId
列添加索引。
将所有这些放在一起,这是一个示例交互:
root@localhost((none)) use test2;
Database changed
root@localhost(test2) show tables;
Empty set (0.00 sec)
root@localhost(test2) CREATE TABLE Platforms(
-> platformId INT(11) unsigned PRIMARY KEY AUTO_INCREMENT,
-> platformName VARCHAR(255)
-> );
Query OK, 0 rows affected (0.21 sec)
root@localhost(test2) CREATE TABLE game(
-> gameId INT(11) unsigned PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(255),
-> publisher VARCHAR(255),
-> platform VARCHAR(255),
-> platformId INT(11) unsigned,
-> price DECIMAL(4,2),
-> index(platformid),
-> FOREIGN KEY (platformId) REFERENCES Platforms(platformId)
-> );
Query OK, 0 rows affected (0.24 sec)
root@localhost(test2) show tables;
+-----------------+
| Tables_in_test2 |
+-----------------+
| game |
| platforms |
+-----------------+
2 rows in set (0.00 sec)
root@localhost(test2) show create table game \G
*************************** 1. row ***************************
Table: game
Create Table: CREATE TABLE `game` (
`gameId` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`publisher` varchar(255) DEFAULT NULL,
`platform` varchar(255) DEFAULT NULL,
`platformId` int(11) unsigned DEFAULT NULL,
`price` decimal(4,2) DEFAULT NULL,
PRIMARY KEY (`gameId`),
KEY `platformId` (`platformId`),
CONSTRAINT `game_ibfk_1` FOREIGN KEY (`platformId`) REFERENCES `platforms` (`platformId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
【讨论】:
感谢您进行如此多的解释并告诉我哪里出错了。这意味着很多:)以上是关于我正在创建两个表,在其中一个表中我试图分配一个外键,但它给了我一个错误的主要内容,如果未能解决你的问题,请参考以下文章