Я не уверен, что делаю, чтобы вызвать эту ошибку. Запрос:

INSERT INTO node (type, language, title) VALUES ('bout', 'en', 'the title 3')

Ошибка:

#1062 - Duplicate entry '0' for key 2 

Таблица:

CREATE TABLE `node` (
  `nid` int(10) unsigned NOT NULL auto_increment,
  `vid` int(10) unsigned NOT NULL default '0',
  `type` varchar(32) NOT NULL default '',
  `language` varchar(12) NOT NULL default '',
  `title` varchar(255) NOT NULL default '',
  `uid` int(11) NOT NULL default '0',
  `status` int(11) NOT NULL default '1',
  `created` int(11) NOT NULL default '0',
  `changed` int(11) NOT NULL default '0',
  `comment` int(11) NOT NULL default '0',
  `promote` int(11) NOT NULL default '0',
  `moderate` int(11) NOT NULL default '0',
  `sticky` int(11) NOT NULL default '0',
  `tnid` int(10) unsigned NOT NULL default '0',
  `translate` int(11) NOT NULL default '0',
  PRIMARY KEY  (`nid`),
  UNIQUE KEY `vid` (`vid`),
  KEY `node_changed` (`changed`),
  KEY `node_created` (`created`),
  KEY `node_moderate` (`moderate`),
  KEY `node_promote_status` (`promote`,`status`),
  KEY `node_status_type` (`status`,`type`,`nid`),
  KEY `node_title_type` (`title`,`type`(4)),
  KEY `node_type` (`type`(4)),
  KEY `uid` (`uid`),
  KEY `tnid` (`tnid`),
  KEY `translate` (`translate`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2586 ;

Что я делаю неправильно? Если не указать nid для новой записи, он будет увеличиваться автоматически, верно?

3
Nick Heiner 23 Янв 2010 в 04:22

3 ответа

Лучший ответ

У вас есть vid в качестве уникального ключа. Однако вы никогда не устанавливаете для него значение, поэтому всегда используется значение по умолчанию 0. Вторая запись в таблице нарушит уникальность.

11
Mike 23 Янв 2010 в 04:25

Проблема заключается в том, что vid не указан. Первая введенная вами запись будет иметь значение vid, равное 0 (по умолчанию), а следующая будет пытаться снова 0 и не выполнить индекс UNIQUE. Не то чтобы только первичный ключ, nid, будет увеличиваться автоматически.

5
Max Shawabkeh 23 Янв 2010 в 04:25

Думаю, проблема не в ниде, а в видео. По умолчанию он равен 0 и обозначен как уникальный.

0
Dave Sims 23 Янв 2010 в 04:29