> 데이터 베이스 > MySQL 튜토리얼 > MySQL에서 자동 증가 열과 다른 기본 키를 모두 사용하려면 어떻게 해야 합니까?

MySQL에서 자동 증가 열과 다른 기본 키를 모두 사용하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-11-03 08:57:29
원래의
1018명이 탐색했습니다.

How can I use both an auto-increment column and a different primary key in MySQL?

MySQL: 자동 증가 및 기본 키 공존의 과제

MySQL은 자동 증가 열과 그렇지 않은 기본 키를 모두 정의하려고 할 때 문제를 제시합니다. 자동 증가 열. 기본적으로 MySQL에서는 자동 증가 열이 하나만 있을 수 있으며 이를 기본 키로 지정해야 한다고 규정합니다. 이는 테이블 성능 및 데이터 검색 효율성을 최적화하려고 할 때 혼란을 초래할 수 있습니다.

사례 연구: 멤버 관리 테이블

다음 예를 고려하십시오. id 열이 자동으로 표시된 멤버 테이블 시각적 모니터링을 쉽게 하기 위해 증분하고, memberid 열은 쿼리에서 구성원 식별을 위한 기본 키 역할을 합니다. 목표는 memberid를 기본 키로 설정하면서 자동 증가 기능을 유지하는 것입니다.

오류 발생

PRIMARY KEY(memberid)를 사용하여 테이블을 생성하려고 하면 오류가 발생합니다.

1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
로그인 후 복사

잠재적 해결책

오류에도 불구하고 자동 증가 열과 다른 기본 키를 모두 가질 수 있습니다. 다음은 두 가지 실행 가능한 접근 방식입니다.

1. 자동 증가 열 인덱스

id와 memberid를 모두 기반으로 효율적인 검색이 가능하도록 id 열에 인덱스를 생성합니다. 수정된 테이블 정의는 다음과 같습니다.

CREATE TABLE members (
  `id` int(11)  UNSIGNED NOT NULL AUTO_INCREMENT,
  `memberid` VARCHAR( 30 ) NOT NULL ,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  `firstname` VARCHAR( 50 ) NULL ,
  `lastname` VARCHAR( 50 ) NULL ,
  PRIMARY KEY (`memberid`),
  KEY (`id`)
) ENGINE = MYISAM;
로그인 후 복사

2. 자동 증가 열을 기본 키의 일부로 만들기

기본 키 조합에 id 열을 포함하도록 테이블을 다시 정의하여 id와 memberid를 모두 기본 키 식별을 위한 정의 요소로 만듭니다. 수정된 정의는 다음과 같습니다.

CREATE TABLE members (
  `id` int(11)  UNSIGNED NOT NULL AUTO_INCREMENT,
  `memberid` VARCHAR( 30 ) NOT NULL ,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  `firstname` VARCHAR( 50 ) NULL ,
  `lastname` VARCHAR( 50 ) NULL ,
  PRIMARY KEY (`id`, `memberid`)
) ENGINE = MYISAM;
로그인 후 복사

이러한 접근 방식 중 하나를 구현하면 시각적 편의를 위한 자동 증가 열의 필요성과 효율적인 멤버 식별을 위한 사용자 정의 키(memberid) 사용의 균형을 맞출 수 있습니다. 쿼리를 실행하면 테이블 성능이 저하되지 않습니다.

위 내용은 MySQL에서 자동 증가 열과 다른 기본 키를 모두 사용하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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