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

青灯夜游
풀어 주다: 2020-10-20 09:52:50
원래의
2109명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿