不能 link 两张表吗?
Can't link two tables?
我敢肯定这是一件非常简单的事情,但我无法理解它。
每次我尝试 运行 这个脚本,我都会得到错误号 150。我知道这是一个外键问题。我的其他 table 很好,link 到项目注册 table 没有问题,但由于某种原因,没有人想 link 到用户字符 table。
我在大学服务器上 运行,所以我无法尝试显示引擎 innoDB 状态。
任何想法这里出了什么问题?
谢谢
CREATE TABLE `userchar` (
`userid` int(5) NOT NULL,
`charname` varchar(25) NOT NULL,
`charstats` varchar(255) DEFAULT NULL,
PRIMARY KEY (`userid`,`charname`),
CONSTRAINT `userchar_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `projectregister` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `notes` (
`userid` int(5) NOT NULL DEFAULT '0',
`charname` varchar(25) NOT NULL,
`usernote` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`userid`,`charname`,`usernote`),
CONSTRAINT `notes_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `projectregister` (`userid`),
foreign key (charname) references userchar(charname)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
外键必须引用唯一值 - 无论是主键还是普通的旧唯一索引。
在这里,您正试图 notes.userid
引用 projectregister.userid
。但是,projectregister.userid
不是唯一值 - 只有 projectregister.userid
和 projectregister.charname
的组合才是唯一的。
您应该更改主键或外键定义,以便它们的列列表匹配。
我敢肯定这是一件非常简单的事情,但我无法理解它。
每次我尝试 运行 这个脚本,我都会得到错误号 150。我知道这是一个外键问题。我的其他 table 很好,link 到项目注册 table 没有问题,但由于某种原因,没有人想 link 到用户字符 table。
我在大学服务器上 运行,所以我无法尝试显示引擎 innoDB 状态。 任何想法这里出了什么问题? 谢谢
CREATE TABLE `userchar` (
`userid` int(5) NOT NULL,
`charname` varchar(25) NOT NULL,
`charstats` varchar(255) DEFAULT NULL,
PRIMARY KEY (`userid`,`charname`),
CONSTRAINT `userchar_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `projectregister` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `notes` (
`userid` int(5) NOT NULL DEFAULT '0',
`charname` varchar(25) NOT NULL,
`usernote` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`userid`,`charname`,`usernote`),
CONSTRAINT `notes_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `projectregister` (`userid`),
foreign key (charname) references userchar(charname)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
外键必须引用唯一值 - 无论是主键还是普通的旧唯一索引。
在这里,您正试图 notes.userid
引用 projectregister.userid
。但是,projectregister.userid
不是唯一值 - 只有 projectregister.userid
和 projectregister.charname
的组合才是唯一的。
您应该更改主键或外键定义,以便它们的列列表匹配。