MySQL에서 자동 증가 복합 키를 어떻게 구현할 수 있습니까?

DDD
풀어 주다: 2024-11-02 19:25:30
원래의
189명이 탐색했습니다.

How Can I Implement Auto-Incrementing Composite Keys in MySQL?

MySQL의 복합 키 자동 증가: 종합 가이드

관계형 데이터베이스로 작업할 때 테이블에 필요한 시나리오를 접하는 것이 일반적입니다. 여러 열로 구성된 복합 키. MySQL에서 복합 키를 구현하려면 레코드를 고유하게 식별하기 위해 자동 증가 값을 사용해야 하는 경우가 있습니다.

두 개의 외래 키('app_id' 및 '테스트_ID'). 이러한 외래 키의 각 고유 조합에 대해 추가 식별을 제공하기 위해 자동 증가 열('sr_no')이 필요합니다. 이 설정에서는 세 열('app_id', 'test_id' 및 'sr_no')에 복합 키가 필요합니다.

이 복합 키를 구현하려면 처음에 다음과 유사한 SQL 문을 사용해 볼 수 있습니다.

`CREATE TABLE issue_log (
sr_no INT NOT NULL AUTO_INCREMENT,
app_id INT NOT NULL,
test_id INT NOT NULL,
issue_name VARCHAR(255) NOT NULL,
PRIMARY KEY (app_id, test_id, sr_no)
);`

그러나 이 쿼리를 실행하면 "잘못된 테이블 정의입니다. 자동 열은 하나만 있을 수 있으며 반드시 있어야 합니다."라는 오류 메시지가 표시됩니다. 키로 정의됩니다." 이 오류는 MySQL이 테이블당 하나의 자동 증가 열만 허용한다는 사실에서 발생합니다.

이 문제는 InnoDB 스토리지 엔진의 한계로 인해 발생합니다. InnoDB 테이블에는 모든 기본 키를 인덱싱해야 합니다. 즉, 복합 기본 키에 자동 증가 열을 포함하면 성능이 저하될 수 있습니다.

이 문제를 극복하고 원하는 결과를 얻으려면 다음 중 하나를 수행할 수 있습니다.

  • 트리거 또는 프로시저 사용: 이 접근 방식에는 'app_id' 및 'test_id'의 고유한 조합을 기반으로 'sr_no' 열을 증가시키는 트리거 또는 프로시저를 생성하는 작업이 포함됩니다. 솔루션에 제공된 예제 트리거는 각각의 새 행이 'issue_log' 테이블에 삽입되기 전에 'sr_no' 열이 자동으로 증가하도록 보장합니다.
  • 다른 데이터베이스 엔진 사용: 사용하는 경우 트리거 또는 프로시저가 바람직하지 않은 경우 MyISAM과 같은 다른 데이터베이스 엔진 사용을 고려할 수 있습니다. MyISAM에는 InnoDB와 동일한 제한 사항이 없으므로 복합 키에서 여러 개의 자동 증가 열을 허용합니다.

트리거 또는 프로시저가 성능에 약간의 영향을 미칠 수 있으므로 요구 사항을 고려하는 것이 중요합니다. 적절한 솔루션을 선택하기 전에 데이터의 양을 확인하세요.

위 내용은 MySQL에서 자동 증가 복합 키를 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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