【问题标题】:ActiveRecord::StatementInvalid: Mysql::Error:ActiveRecord::StatementInvalid: Mysql::Error:
【发布时间】:2009-06-03 19:17:39
【问题描述】:

我试图用谷歌的核心来了解造成这个问题的原因,但没有任何帮助,所以我想在这里写!

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 行

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

它处于自动增量状态,我确定没有其他 id 为 5 的条目!

发生了什么事??

【问题讨论】:

  • 如果执行 u = User.find(5) 会得到什么日志输出?
  • 您可以发布此表的 schema.rb 内容吗?

标签: mysql ruby-on-rails activerecord


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      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 语句中。

      您会发布填充用户对象然后创建它的相关代码吗?我认为在您的代码中某处您正在用 5 填充“id”属性,这导致了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多