자동 증분 기본 키 필드 (MySQL)에서 중복 ID를 일으킬 수있는 것은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/514018

  •  21-08-2019
  •  | 
  •  

문제

해결되었습니다

개발자로부터 : 문제는 이전 버전의 코드가 여전히 자동 증분 대신 수동 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를 검색합니다.

도움이 되었습니까?

해결책

기본 키가 정의되고 auto_increment에도 불구하고 과거의 MySQL 데이터베이스에 약간의 중복 키 오류가 갑자기 나타났습니다. 테이블이 타락했기 때문에 매번.

부패한 경우 체크 테이블을 수행하면 문제가 노출되어야합니다. 실행하면 다음을 수행 할 수 있습니다.

CHECK TABLE tbl_name

어쨌든 부패한 것으로 돌아온다면 (일반적으로 크기가 실제보다 크다고 말할 것입니다) 다음을 수리하기 위해 다음을 실행하십시오.

REPAIR TABLE tbl_name

다른 팁

Sales_ID 필드에는 기본 (또는 고유 한) 키가 있습니까? 그렇지 않다면, 다른 것이 아마도 기존 숫자를 재사용하는 삽입물이나 업데이트를 만들고있을 것입니다. 그리고 "다른 것"으로 나는 단지 코드를 의미하지 않습니다. 실수로 데이터베이스에 액세스 할 수있는 사람이 될 수 있습니다.

상대방이 말했듯이; 당신의 예제와 함께 불가능합니다.

질문과 관련이 없지만 기본 키 열에 대한 별도의 키를 만들 필요는 없습니다. 이미 고유 한 (1 차) 키가있을 때 테이블에 추가되지 않은 인덱스를 추가하는 것입니다.

우리는 테이블에 중복 키를 얻고 있습니다.

삽입하려고 할 때 오류가 발생한다는 뜻입니까, 아니면 열에 두 번 이상 저장된 값이 있다는 뜻입니까?

삽입물에서 열을 생략하거나 NULL 또는 0을 삽입하려고 할 때만 자동 점수가 시작됩니다. 그렇지 않으면 삽입 문에 값을 지정하여 자동 증가 메커니즘을 과도하게 흡수 할 수 있습니다. 예를 들어:

INSERT INTO table_1 (sales_id) VALUES (26759);

당신이 지정한 값이 이미 표에 존재하는 경우 오류가 발생합니다.

이 쿼리 결과를 게시하십시오.

SELECT `sales_id`, COUNT(*) AS `num`
FROM `table_1`
GROUP BY `sales_id`
HAVING `num` > 1
ORDER BY `num` DESC
  • 다른 필드에 고유 한 키가 있다면 문제가 될 수 있습니다.

  • Auto_increment 열에서 가장 높은 값에 도달 한 경우 MySQL은 계속 다시 삽입하려고합니다. 예를 들어 Sales_ID가 Tinyint 열인 경우 ID 127에 도달 한 후에 중복 키 오류가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top