errno 150 mySQL外键

时间:2014-10-15 19:46:22

标签: mysql

当我尝试使用UserID上的外键创建第二个表时,这个SQL给了我Errno 150

任何人都可以告诉我我做错了什么?

CREATE DATABASE IF NOT EXISTS  OTA;
USE OTA;
CREATE TABLE IF NOT EXISTS Users
(
UserID int AUTO_INCREMENT NOT NULL PRIMARY KEY,
UserName varchar(255) NOT NULL,
Email varchar(255) UNIQUE ,
PW varchar(255),
PN varchar(255),
Admin BIT
);


CREATE TABLE IF NOT EXISTS Notes
(
UID int AUTO_INCREMENT NOT NULL PRIMARY KEY,
Note varchar (255) NOT NULL,
c_Date Date NOT NULL,
c_text varchar (255) NOT NULL,
FOREIGN KEY (UID) REFERENCES Persons(UserID)
);

很抱歉这是一个重复的问题,但我找不到相关问题之间的答案。

2 个答案:

答案 0 :(得分:1)

问题是,当您的第一个表名为Persons(UserID)时,您尝试引用Users。试试这个钥匙:

FOREIGN KEY (UID) REFERENCES Users(UserID)

但是,您应该为备注ID设置单独的列。

答案 1 :(得分:0)

尝试在以下情况后声明主键:

CREATE TABLE Orders
(O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id))

此外,您自动增加了UID和UserID。如果它们的长度相同,则可以正常使用,但如果您尝试引用不存在的外键值,则会出现错误。