2009-02-05 2 views
0

는 개발자에서자동 증분 기본 키 필드 (mysql)에 중복 ID가 발생할 수 있습니까?

를 해결 : 문제는 코드의 이전 버전은 여전히 ​​수동 식별자 대신 자동 증가를 사용하는 테이블에 기록 된 것이 었습니다. 자기 자신에 대한 참고 사항 : 항상 테이블이 기록되는 다른 가능한 위치를 확인하십시오.

테이블에 중복 키가 나타납니다. 그들은 동시에 삽입되지 않습니다 (6 시간 간격).

테이블 구조 :

CREATE TABLE `table_1` (
    `sales_id` int(10) unsigned NOT NULL auto_increment, 
    `sales_revisions_id` int(10) unsigned NOT NULL default '0', 
    `sales_name` varchar(50) default NULL, 
    `recycle_id` int(10) unsigned default NULL, 
    PRIMARY KEY (`sales_id`), 
    KEY `sales_revisions_id` (`sales_revisions_id`), 
    KEY `sales_id` (`sales_id`), 
    KEY `recycle_id` (`recycle_id`) 
) ENGINE= MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=26759 ; 

삽입 :

insert into `table_1` (`sales_name`) VALUES ("Blah Blah") 

우리는 PHP5와 MySQL은 5.0.20을 실행에 mysql_insert_id를 사용하는()가 바로 삽입 쿼리 후 삽입 ID를 검색 할 수 있습니다.

+0

출력에 도움이 될만한 SHOW CREATE TABLE을 제공해주십시오. –

답변

5

기본 키가 정의되어 있고 auto_increment가 있더라도 갑자기 MySql 데이터베이스에 몇 개의 중복 키 오류가 나타났습니다. 테이블이 손상 되었기 때문에 매회마다있었습니다.

손상된 경우 검사 테이블을 수행하면 문제가 노출됩니다.당신은 실행하여이 작업을 수행 할 수

CHECK TABLE tbl_name 

그 다음 바로 그것을 복구하려면 다음을 실행 (보통 크기가 실제로해야보다 더 말할 것이다) 어쨌든 다시 부패 오는 경우 :

REPAIR TABLE tbl_name 
2

sales_id 필드에 기본 (또는 고유 한) 키가 있습니까? 그렇지 않다면 기존의 번호를 다시 사용하는 삽입 또는 업데이트가있을 것입니다. 그리고 "다른 것"에 의해 나는 단지 코드를 의미하는 것이 아닙니다. 실수로 데이터베이스에 액세스 할 수있는 사람이 될 수 있습니다.

+0

죄송합니다. 예, sales_id에 기본 키가 있습니다. 언급하는 것을 잊어 버렸습니다. +1 –

0
  • 다른 필드에 고유 키가있는 경우 문제 일 수 있습니다.

  • auto_increment 열의 최대 값에 도달했다면 MySQL은 계속 다시 삽입하려고합니다. 예를 들어 sales_id가 tinyint 열인 경우 ID 127에 도달하면 중복 키 오류가 발생합니다.

+0

아무렇지도 않게 받아들이면 : –

+0

전혀 그렇지 않다면, mysql은 에러가 발생하면 – Zbynek

2

귀하의 예를 들어 그것은 불가능합니다.

질문과는 관계가 없지만 기본 키 열에 대해 별도의 KEY를 만들 필요는 없습니다. 고유 한 (기본) 키가 이미있는 경우 테이블에 고유하지 않은 색인을 추가하는 것입니다 .

+0

Thx를 알아 차리고 개발자에게 언급 할 것입니다. –

2

테이블에 중복 키가 있습니다.

삽입 할 때 오류가 발생 했습니까? 아니면 값이 두 번 이상 열에 저장되었다는 것을 의미합니까?

자동 증가는 INSERT에서 열을 생략하거나 NULL 또는 0을 삽입하려고하는 경우에만 실행됩니다. 그렇지 않으면 INSERT 문에서 자동 증가 메커니즘을 무시하고 값을 지정할 수 있습니다. 예를 들면 : 당신이 이미 지정한 값이 테이블에있는 경우

INSERT INTO table_1 (sales_id) VALUES (26759); 

, 오류가 발생합니다.

1

이 쿼리의 결과를 게시하십시오 :

SELECT `sales_id`, COUNT(*) AS `num` 
FROM `table_1` 
GROUP BY `sales_id` 
HAVING `num` > 1 
ORDER BY `num` DESC 
관련 문제