Не могу создать узлы после DB-Import (Duplicate Entries) - PullRequest
0 голосов
/ 03 ноября 2010

Я экспортировал несколько таблиц, добавил к ним префикс "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.Поэтому я попытался сбросить значение auto_increment на какое-то нелепое большое число, используя ALTER TABLE some_table AUTO_INCREMENT=10000.Все то же поведение ...

Кто-нибудь знает, что здесь происходит?

Я делал эту процедуру несколько раз раньше ... но без этого.Это сводит меня с ума: /

Ответы [ 2 ]

0 голосов
/ 04 ноября 2010

Извлеченный урок:

Drupal не использует значение автоинкремента MySQL.

Как я узнал, автоинкремент не является частью стандарта SQL Ansi - это очень распространенная вещь.Drupal не хочет полагаться на некоторые реализации различных СУБД, поэтому у них есть таблица {sequences}, в которой есть столбец для имени таблицы и следующее значение id, которое можно загрузить с помощью db_next_id ($ name) .Конечно, добавляя префиксы к именам таблиц, я должен был добавить префикс и в таблицу последовательностей.

Несмотря на то, что это сводило меня с ума, я считаю, что это мудрое решение, принятое разработчиками drupal.

0 голосов
/ 03 ноября 2010

Итак, ваш импорт работает нормально, только когда вы пытаетесь вставить новую запись после того, как все было импортировано, вы получаете эту ошибку?Если это так, то либо:

  1. Ваш auto_increment установлен неправильно.
  2. Вы указываете значение для своего поля auto_increment.

Из поста выше, похоже, вы указываете значение для своего поля auto_increment.Вы должны обновить ваш auto_increment до MAX + 1 вашей таблицы, а затем, когда вы это сделаете, вы вставляете, не указывайте значение для этого поля, и MySQL будет использовать auto_increment для вас ...

...