【问题标题】:(1062, "Duplicate entry '0' for key 'PRIMARY'")(1062,“键 'PRIMARY' 的重复条目 '0'”)
【发布时间】:2014-09-04 12:59:12
【问题描述】:

我收到此错误(1062, "Duplicate entry '0' for key 'PRIMARY'")。这发生在我将我的 Django 应用程序从 sqlite3 迁移到 MySQL 之后。这是相关表:

mysql> describe meddy1_specialization;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(30) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

这是模型:

class Specialization(models.Model):
    name = models.CharField(max_length=30)

    def __unicode__(self):
        return self.name

这是表格中的数据:

mysql> select * from meddy1_specialization;
+----+--------------------+
| id | name               |
+----+--------------------+
|  1 | Dentist            |
|  2 | Dermatologist      |
|  3 | Primary Care       |
|  4 | Ophthalmologist    |
|  5 | Pediatrician       |
|  6 | Orthopedist        |
|  7 | Ear, Nose & Throat |
|  8 | Gynecologist       |
|  9 | test               |
| 13 | test               |
| 14 | test1              |
+----+--------------------+
11 rows in set (0.00 sec)

【问题讨论】:

  • 如果错误发生在您迁移表之后,也许您应该说一下您实际在做什么何时错误发生了?
  • 产生错误的insertupdate语句是什么?
  • @GordonLinoff 所以我正在使用 Django,它隐藏了插入语句/在后台处理它。你可以看看我上面的模型,它来自models.py。此外,当我尝试使用控制台中的 MySQL 插入语句手动添加数据时,它可以工作。但是当我尝试从 Django 管理控制台添加专业化时,它给了我错误,这也是这篇文章的标题。
  • @DanielRoseman 我试图从管理控制台添加一个新的专业化。
  • 您能解释一下您是如何迁移数据库的吗?另外,您正在使用的 django 版本。

标签: mysql django duplicates primary-key auto-increment


【解决方案1】:

你能在你的mysql数据库中检查增量号是多少吗? 似乎mysql正在尝试插入具有相同id的行。

【讨论】:

  • 是的,我检查了这一点,并告诉 MySQL 从上面示例中的 'id' 停止的位置开始递增...14。没用。然后我删除了“id”列并重新添加。没用。我使用 truncate 删除包含所有数据的表并重新创建。没用...
  • 如果你尝试通过 MySQL self.insert 插入一行。这有效还是返回错误?
【解决方案2】:

在尝试迁移之前确保 target_table 为空...首先从目标表中删除所有内容。该错误可能是由重复的 id 号引起的,即使它 = 0(新记录的默认值)。尝试为每条记录明确定义每个 ID 号

在您的情况下,从 sqlite3 导出到 script.sql 文件,然后找到数据并将其添加到脚本中,例如;

insert into `meddy1_specialization` (`id`, `name`) VALUES 
(1 'Dentist'),
(2,'Dermatologist'),
(3,'Primary Care'),
(4,'Ophthalmologist'),
(5,'Pediatrician'),
...--plug in all your values in this fashion

发生这种情况的另一种情况是,当从一个 Msql 表迁移信息到另一个时......可能需要再次显式定义......可以在源表上添加一个具有唯一 ID 和自动增量的列,然后这将使用该列使迁移更容易...

【讨论】:

    猜你喜欢
    • 2017-08-07
    • 2023-03-07
    • 2018-07-11
    • 2012-08-24
    • 1970-01-01
    • 2012-07-23
    • 2013-09-30
    相关资源
    最近更新 更多