>  기사  >  데이터 베이스  >  mysql에서 파티션 추가 시 오류가 발생하면 어떻게 해야 하나요?

mysql에서 파티션 추가 시 오류가 발생하면 어떻게 해야 하나요?

青灯夜游
青灯夜游원래의
2020-10-20 09:52:502114검색

mysql 파티션 추가 오류, "1503" 오류가 보고되는 이유: 각 파티션 테이블의 수식 열은 기본 키 "고유 키"에 포함되어야 합니다. 그렇지 않으면 오류가 보고됩니다. 해결 방법을 사용하세요. "PRIMARY KEY" 키 먼저 복합 기본 키를 생성하고 기본 키에 파티션 필드를 추가한 후 파티션 작업을 수행합니다.

mysql에서 파티션 추가 시 오류가 발생하면 어떻게 해야 하나요?

(추천 튜토리얼: mysql 비디오 튜토리얼)

테이블 A의 기본 키가 ID이고 파티션 필드가 createtime인 등 파티션 필드가 기본 키 필드에 포함되지 않은 경우, 파티션 기준 시간 범위, 코드는 다음과 같습니다.

CREATE TABLE T1 (
     id int(8) NOT NULL AUTO_INCREMENT,
     createtime datetime NOT NULL,
      PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
PARTITION BY RANGE(TO_DAYS (createtime))
(
PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
PARTITION p19 VALUES LESS ThAN  MAXVALUE);

오류 메시지: #1503

A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE TABLE'S PARTITIONING FUNCTION

MySQL 기본 키 제한, 각 파티션 테이블의 수식 열은 기본 키 "고유 키"에 포함되어야 합니다.

이 설명은 다음과 같습니다. 공식 MYSQL 문서

18.5.1.파티셔닝 키, 기본 키 및 고유 키

이 섹션에서는 파티셔닝 키와 기본 키 및 고유 키의 관계에 대해 설명합니다. 이 관계를 관리하는 규칙은 다음과 같습니다. : 분할된 테이블의 분할 표현식에 사용되는 모든 열은 테이블이 가질 수 있는 모든 고유 키의 일부여야 합니다.

즉, 테이블의 모든 고유 키는 테이블의 분할 표현식에 있는 모든 열을 사용해야 합니다. 테이블의 기본 키는 정의에 따라 고유 키이므로 이 특정 사례는 이 섹션의 뒷부분에서 설명됩니다.) 예를 들어 다음 각 테이블 생성 문은 유효하지 않습니다.

파티션 필드는 기본 키에 포함되어야 합니다. MYSQL이 이를 고려하는 이유에 대해 CSDN Bamboo는 다음과 같이 설명합니다.

기본 키의 효율성을 보장하기 위해. 그렇지 않으면 동일한 기본 키 영역의 항목 중 하나가 파티션 A에 있고 다른 항목이 파티션 B에 있으면 분명히 더 문제가 될 것입니다. copyright

해결책을 논의해 봅시다. 결국 날짜가 테이블의 기본 키가 되는 것은 흔하지 않습니다.

방법 1:

MYSQL의 요구 사항을 준수하여 기본 키에 파티션 필드를 추가하여 복합 기본 키를 형성합니다.

CREATE TABLE T1 (
     id int(8) NOT NULL AUTO_INCREMENT,
     createtime datetime NOT NULL,
      PRIMARY KEY (id,createtime)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
PARTITION BY RANGE(TO_DAYS (createtime))
(
PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
PARTITION p19 VALUES LESS ThAN  MAXVALUE);

테스트를 통과하고 파티션이 성공했습니다.

방법 2:

MYSQL은 파티션을 생성하기 위해 기본 키에 파티션 필드를 포함해야 하는데, 테이블 생성 시 기본 키 필드를 지정하지 않아도 괜찮을까요? ?

테스트는 다음과 같습니다:

CREATE TABLE T1 (
     id int(8) NOT NULL ,
     createtime datetime NOT NULL
      ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
PARTITION BY RANGE(TO_DAYS (createtime))
(
PARTITION p0 VALUES LESS THAN (TO_DAYS('2010-04-15')),
PARTITION p1 VALUES LESS THAN (TO_DAYS('2010-05-01')),
PARTITION p2 VALUES LESS THAN (TO_DAYS('2010-05-15')),
PARTITION p3 VALUES LESS THAN (TO_DAYS('2010-05-31')),
PARTITION p4 VALUES LESS THAN (TO_DAYS('2010-06-15')),
PARTITION p19 VALUES LESS ThAN  MAXVALUE);

테스트를 통과하고 파티션이 성공적으로 이루어졌습니다. OK copyright

계속해서 기본 키를 추가하세요

alter table t1 add PRIMARY KEY(ID)

오류 1503, 이전과 같은 오류입니다.

alter table t1 add PRIMARY KEY(ID,createtime)

기본키가 성공적으로 생성되었으나 여전히 복합기본키인 것 같습니다. 다른 방법이 없어 명령어를 따라야 합니다.

기본 키가 성공적으로 생성되었습니다. 자동 증가 필드 설정에 ID를 추가하세요

alter table t1 change id id int not null auto_increment;
alter table t1 auto_increment=1;

마지막으로 MYSQL 파티션 필드가 기본 키 필드에 포함되어야 합니다.

위 내용은 mysql에서 파티션 추가 시 오류가 발생하면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.