【问题标题】:Can't create nodes after DB-Import (Duplicate Entries)数据库导入后无法创建节点(重复条目)
【发布时间】:2010-11-03 13:51:27
【问题描述】:

我导出了一堆表并在它们前面加上“ch_”并再次导入它们。全部使用 phpmyadmin。一切正常……直到我想创造一些东西。它失败并显示此消息:

user warning: Duplicate entry '4-4' for key 'PRIMARY' query: INSERT INTO ch_node (nid, vid, title, type, uid, status, created, changed, comment, promote, sticky) VALUES (4, 4, 'Nützliche Dokumente', 'page', 1, 1, 1288790996, 1288791130, 0, 0, 0) in /var/www/clients/client20/site60/docroot/includes/database.mysql.inc on line 172.

而每次我尝试保存时,“4-4”都会增加。这让我觉得数据库中的 auto_increment 值在某种程度上是错误的——尽管它在我的export.sql 中被正确指定。因此,我尝试使用ALTER TABLE some_table AUTO_INCREMENT=10000 将 auto_increment 值重置为某个荒谬的高数。还是一样的行为……

有人知道这里发生了什么吗?

我之前做过几次这个程序......但没有发生这种情况。这让我发疯:/

【问题讨论】:

    标签: drupal drupal-5


    【解决方案1】:

    所以,您的导入工作正常,只有在导入所有内容后尝试插入新记录时才会出现此错误?如果是这种情况,那么:

    1. 您的 auto_increment 设置不正确。
    2. 您正在为您的 auto_increment 字段指定一个值。

    从上面的帖子看来,您正在为您的 auto_increment 字段指定一个值。您应该将您的 auto_increment 更新为表的 MAX+1,然后当您插入时,不要为该字段指定值,MySQL 将为您使用 auto_increment...

    【讨论】:

    • 正如我所写,我什至使用 alter table 手动设置了 auto_increment。当然,我为我的 auto_increment 字段指定了一个值 - 否则我的数据库中的所有关系都会中断。
    • 如果你要为它指定一个值,那么 auto_increment 的设置并不重要。您正在指定重复的键值。要么指定一个不同的值(这显然会破坏你的关系),要么根本不指定任何东西,让自动增量为你使用一个值。
    【解决方案2】:

    经验教训:

    Drupal 不使用 MySQL 的 auto_increment 值。

    据我所知,自动增量不是 SQL Ansi 标准的一部分——它只是一件很常见的事情。 Drupal 不希望依赖不同 RDBMS 的某些实现,因此他们有一个表 {sequences},其中有一列用于表名和下一个 id-value,可以使用 db_next_id($name) 加载。当然,通过为表名添加前缀,我也必须在序列表中添加前缀。

    尽管它一开始就让我发疯,但我认为这是 drupal 开发人员做出的明智决定。

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 2012-07-30
      • 2021-06-14
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多