ActiveRecord :: StatementInvalid:Mysql :: Error:

时间:2009-06-03 19:17:40

标签: mysql ruby-on-rails activerecord

我试图谷歌硬核得到什么造成了这个问题,但没有什么帮助我,所以我想写在这里!

while doing:
User.create(:name => "daniel") 
or 
User.new(:name => 'daniel').save

在rails控制台中,我收到此错误

ActiveRecord::StatementInvalid: Mysql::Error: Duplicate entry '5' for key 1: 
INSERT INTO `users` (`name`, `salt`, `privilegi`, `confirmed_mail`, `avatar_id`, `id`, `password`, `session_num`, `email`) VALUES('daniel', '23404', NULL, NULL, NULL, 5, NULL, NULL, NULL)

这是“用户”的SQL表格行

| id             | int(11)      | NO   | PRI | NULL    | auto_increment |    

它是自动增量,我确定没有其他ID为5的条目!

发生了什么事?

3 个答案:

答案 0 :(得分:0)

如果您尝试将此表的存储引擎从/更改为MyISAM / InnoDB并出现问题,则此表中的索引可能已经搞砸了。尝试使用mysqldump备份此数据库并将其恢复 - 它可能有效:http://www.vbulletin.com/forum/showthread.php?t=141322

答案 1 :(得分:0)

INSERT INTO users (name, salt, privilegi, confirmed_mail, avatar_id, id, password, session_num, email) 
VALUES ('daniel', '23404', NULL, NULL, NULL, 5, NULL, NULL, NULL)

id是SQL语句的字段列表,值为5.这似乎不正确。由于id是自动增量字段,因此不应包含在SQL语句中。

您是否会发布填充User对象然后创建它的相关代码?我认为你的代码中的某个地方用5填充了“id”属性,这导致了问题。

答案 2 :(得分:0)

我遇到了同样的问题,请查看是否在此表上创建的任何索引都不允许重复。这解决了我的问题