MySQL错误1005

时间:2012-11-29 11:39:42

标签: mysql sql mysql-error-1005

我在MySQL中创建了3个表(Users,linkPosts,replyPosts)

前两个表执行正常,但是当我尝试插入replyPosts的SQL时出错。以下是三个表的SQL代码:

第一个表SQL代码:工作正常

CREATE TABLE Users ( 
userName VARCHAR (20) NOT NULL PRIMARY KEY,
password VARCHAR (20),
firstName VARCHAR (200),
lastName VARCHAR (200),
bio VARCHAR (160),
email VARCHAR (200),
country VARCHAR (200)
); 

第二个表的代码:工作正常

CREATE TABLE linkPosts ( 
linkPostID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
link VARCHAR(255),
linkDescription VARCHAR (140), 
linkPostTime TIMESTAMP,
userName VARCHAR (20),
FOREIGN KEY (userName) REFERENCES Users(userName));

出现错误的第三个表:

CREATE TABLE replyPosts ( 
replyPostID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
reply VARCHAR (140), 
replyPostTime TIMESTAMP,
userName VARCHAR (20),
linkPostID INT,
FOREIGN KEY (linkPostID) REFERENCES linkPosts(linkPostID),
FOREIGN KEY (userName) REFERENCES Users(userName));

我得到的错误如下:

Error 1005 : Can't create table 'mdb_aa847.replyPosts' (errno: 150)

我搜索并尝试过其他人的解决方案,但从未奏效。任何人都可以找出错误的位置?

提前致谢..

2 个答案:

答案 0 :(得分:1)

replyPosts 是否已存在?如果您有重复的外键名称,则可能发生此错误。使用perror错误(在您的情况下,错误150),您应该得到:

MySQL error code 150: Foreign key constraint is incorrectly formed

在查看完整的SQL之后,我认为在创建 LinkPosts 表时 linkPostID为INT UNSIGNED 这一事实,而在 ReplyPosts < / strong> table, linkPostID是INT 。将其更改为 INT UNSIGNED ,看看它是否有效。

根据此处的文档"foreign keys"应该具有相同的大小和符号,如果它是整数。

作为旁注,我仍然坚持在User表而不是UserName上使用UserId作为主键。每次在Users表中插入记录时,它都将按UserName排序(因为它是主键,因此是聚簇索引)。 UserName字段(Varchar(20))越大,对整个表进行排序所需的时间越长。随着表的增长,将记录插入User表会变得很麻烦。

答案 1 :(得分:0)

这是由于外键约束

因为您正在使用FOREIGN KEY (userName) REFERENCES Users(userName) 这是一个varchar,在MYSQL中不可能在varchar

上进行外部引用

您可以删除userName的外键约束,并尝试使用userId