2013-08-06 2 views
1

mysql 보관 엔진을 사용하여 일부 파일을 보관하려고합니다. 나는 파일의 내용을 삽입 할이 쿼리를 사용하고 있습니다 :보관 엔진 "중복 키"오류가있는 mysql 테이블에 삽입

insert into test_table (id,arch) values (123,'FILE_CONTENT') 

이 개 기록을 삽입 한 후, 나는 테이블에 존재하지 않는 키에 대한 MySQL의에서 "중복 키"오류가 발생합니다. 나는 그것을 5 번 확인했지만 기록은 거기에 없다. 중복 ID에 대해 count (*)를 선택하고 결과는 0입니다.

innodb 엔진으로 동일한 코드를 검사했는데 정상적으로 작동합니다. 누구든지 아카이브 엔진의 문제점을 알 수 있습니까?

편집 :

내 테이블 정보를 당신이 ARCHIVE 엔진의 버그를 발견 한 것 같습니다

CREATE TABLE `test_table` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `arch` mediumtext, 
    PRIMARY KEY (`id`) 
) ENGINE=ARCHIVE AUTO_INCREMENT=100175977 DEFAULT CHARSET=utf8mb4; 
+0

테이블 정의를 게시하십시오. 이것은 없어야합니다. 이 테이블에 방아쇠가 있습니까? – RandomSeed

+0

내 질문을 편집했고 테이블에 트리거가 없습니다. – AliBZ

답변

1

입니다. 테이블의 AUTO_INCREMENT 속성보다 작은 AUTO_INCREMENT 열의 값으로 레코드를 삽입하려고하면 삽입이 실패하는 것 같습니다.

CREATE TABLE test_table1 (
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (id) 
) ENGINE=ARCHIVE AUTO_INCREMENT=123; -- notice the AUTO_INCREMENT value 

INSERT INTO test_table1 (id) value (123); -- ok 

을하지만이 "중복 키"와 함께 실패합니다 :

이 잘 작동이 문제가 발생하지 않는

CREATE TABLE test_table2 (
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (id) 
) ENGINE=ARCHIVE AUTO_INCREMENT=124; -- notice the AUTO_INCREMENT value 

INSERT INTO test_table2 (id) value (123); -- duplicate key 

의 MyISAM과 InnoDB의, 그리고 나는이에 대한 참조를 찾을 수 없습니다 docs. 내가 당신이라면 MySQL에서 버그를 제기 할 것입니다 (v5.5.6v5.5.32 아래 확인).

+0

C++을 잘 읽지는 못하지만, 유니시티 검사를 처리하는 코드가 성능상의 이유 때문에 의도적으로 무시당하는 것 같습니다 ([line 982] (http://bazaar.launchpad.net/~mysql/mysql -server/5.7/view/head : /storage/archive/ha_archive.cc)). 어쩌면 잘 아는 사람도 확인할 수 있습니다. – RandomSeed

+0

http://dba.stackexchange.com/questions/47662/inserting-into-mysql-table-with-archive-engine-duplicate-key-error에 따르면 색인화 된 열을 사용할 수없는 것처럼 보입니다. 아카이브 테이블. 유일한 방법은 삽입 중에 설정해서는 안되는 자동 증가를 사용하는 것입니다 (아니면 그냥 0을 사용합니다). – AliBZ

+0

이 답변은 관련 매뉴얼 발췌문 ("AUTO_INCREMENT 컬럼은 고유하거나 고유하지 않은 색인을 가질 수 있음")을 인용 함에도 불구하고 자기 모순입니다. 또한 "* [AUTO_INCREMENT 컬럼에 대한 명시 적 값을 가진 행 삽입] *은 다른 저장소 엔진에 대한 일반 중복 키를 생성합니다"와 같은 모호한 정보도 포함됩니다 (동일한 삽입은 InnoDB와 함께 성공합니다). 'AUTO_INCREMENT'와는 상관 없지만'PRIMARY KEY'와는 관계가 없습니다. 그러나 'ARCHIVE'테이블은 자주 읽는 것이 아닙니다. 이름에서 알 수 있듯이 공간 효율적인 * 스토리지 * 솔루션입니다. – RandomSeed