2010-01-23 3 views
3

이 오류의 원인은 무엇입니까? 질의 :MySQL : 키 2의 중복 항목

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를 지정하지 않으면 자동으로 증가합니다. 맞습니까?

답변

11

고유 키로 vid이 있습니다. 그러나 값을 설정하지 않으므로 기본값 인 0이 항상 사용됩니다. 테이블에 두 번째 입력하면 고유성을 위반하게됩니다.

5

문제는 vid이 지정되지 않은 것으로 보입니다. 첫 번째 항목은 vid (기본값)이고 다음은 0을 다시 시도하고 UNIQUE 색인에서 실패합니다. 기본 키인 nid 만 자동 증가합니다.

0

제 생각에는 nid가 문제가 아닌 것 같습니다. vid가 있습니다. 기본값은 0이며 고유하게 지정됩니다.