简单添加外键returns #1215 无法添加外键约束
Simple add foreign key returns #1215 cannot add foreign key constraint
我确信我遗漏了一些简单的东西。
请求日志table:
CREATE TABLE `requestlog` (
`RequestID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`RequestName` varchar(30) NOT NULL,
`RequestData` varchar(150) NOT NULL,
`RequestDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`Version` varchar(15) NOT NULL,
PRIMARY KEY (`RequestID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
响应日志table:
CREATE TABLE `responselog` (
`ResponseID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`FK_RequestID` int(10) NOT NULL,
`ResponseText` text NOT NULL,
PRIMARY KEY (`ResponseID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
正在尝试使用
在 ResponseLog.FK_RequestID 上添加外键
ALTER TABLE ResponseLog
ADD FOREIGN KEY (FK_RequestID) REFERENCES RequestLog(RequestID)
别拍我,我错过了什么?
ALTER TABLE
引用 tables ResponseLog
和 RequestLog
。您的 CREATE TABLE
语句创建了名为 requestlog
和 responselog
的 table。尝试更改 ALTER TABLE
语句,使其使用大小写相同的 table 标识符。
此外,这可能是主要问题,引用的字段具有不同的数据类型。一个是 int,另一个是 unsigned int。数据类型必须匹配,否则字段可能会变得不一致。 MySQL 知道这一点并阻止您创建损坏的外键。
我确信我遗漏了一些简单的东西。
请求日志table:
CREATE TABLE `requestlog` (
`RequestID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`RequestName` varchar(30) NOT NULL,
`RequestData` varchar(150) NOT NULL,
`RequestDate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`Version` varchar(15) NOT NULL,
PRIMARY KEY (`RequestID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
响应日志table:
CREATE TABLE `responselog` (
`ResponseID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`FK_RequestID` int(10) NOT NULL,
`ResponseText` text NOT NULL,
PRIMARY KEY (`ResponseID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
正在尝试使用
在 ResponseLog.FK_RequestID 上添加外键ALTER TABLE ResponseLog
ADD FOREIGN KEY (FK_RequestID) REFERENCES RequestLog(RequestID)
别拍我,我错过了什么?
ALTER TABLE
引用 tables ResponseLog
和 RequestLog
。您的 CREATE TABLE
语句创建了名为 requestlog
和 responselog
的 table。尝试更改 ALTER TABLE
语句,使其使用大小写相同的 table 标识符。
此外,这可能是主要问题,引用的字段具有不同的数据类型。一个是 int,另一个是 unsigned int。数据类型必须匹配,否则字段可能会变得不一致。 MySQL 知道这一点并阻止您创建损坏的外键。