[SQL] primary 키는 테이블당 하나만 가능하지 않나요?

제가 SQL을 공부를 하다가 이상한 점이 있어서 문의드립니다.

아래와 같은 예문이 있는데요.

CREATE TABLE sample (

no INTEGER NOT NULL,

sub_no INTEGER NOT NULL,

name VARCHAR(30),

CONSTRAINT pkeysample PRIMARY KEY (no, sub_no));

제가 알기로 한 테이블에 프라이머리 키는 1개만 지정되는 것으로 알고 있습니다. 위 예문은 프라이머리 키를 no과 sub_no 두개로 지정하는 듯한데요, 왜 문제가 없는 것일까요? 궁금합니다.

    4개의 답변이 있어요!

    • 개념을 잘못알고 계시는 듯합니다. PRIMARY KEY 가 하나만 생성이 가능한 것이고, PRIMARY KEY를 구성하는 컬럼은 여러개를 지정할 수 있습니다. 각 컬럼을 조합하여, 유니크한 Key 조합을 만드시는 겁니다. 위의 예문으로 다시 설명 드리면, 해당 Table 은 no, sub_no 를 통해 유니크한 Key 조합을 생성하여, 그 조합을 PRIMARY KEY 로 등록한 것입니다. PRIMARY KEY 조합을 2-3개 등록을 못하는 거지 조합 자체는 여러개의 컬럼을 지정하셔도 됩니다.

    • 안녕하세요.

      primary key는 말 그대로 하나만 지정이 가능합니다.

      하지만 테이블 생성 쿼리를 보면

      PRIMARY KEY (no, sub_no)

      두 필드의 조합으로 이루어져있죠? 즉, primary key의 조건이 두 필드의 쌍인격이죠

      예를들면 row값이

      no=1, sub_no=1 인 경우와

      no=1, sub_no=2 인 경우는 다르다는것이죠

      만약 PRIMARY KEY (no) 로만 설정했을 경우

      no=1, sub_no=1 인 값이 있고

      no=1, sub_no=2 인 값을 insert 하게 되면 기본키 제약조건에 의해 에러가 발새하게 됩니다.

      no=1은 테이블당 하나만 존재해야 하는데 이미 있기 때문이죠.

      즉 primary key를 2개를 설정한 것이 아니고

      필드 2개를 쌍으로 하나의 primary key가 설정된 것입니다. ^^

    • 안녕하세요. 아하(a-ha) 프로그래밍 지식 답변자 입니다.

      테이블은 오직 하나의 PK를 가질 수 있습니다. 그리고 오직 하나의 컬럼만 PK를 설정할 수 있다 라는 말은 없습니다. 질문자님이 올린 예문은 두 가지 컬럼을 조합하여 복합키로 Primary Key를 만드는 방법 입니다. 하나의 튜플에 두 가지 컬럼이 조합되어 하나의 키가 되는 것 입니다.

      답변이 도움이 됐으면 합니다. 좋은 하루 되세요!

    • 안녕하세요

      primary key는 당연히 하나만 지정 가능합니다.

      아래 구문은 primary key를 하나만 설정했고, 컬럼을 여러개 선언한거는 복합 키로 설정한 겁니다.

      'pkeysample' 이라는 하나의 primary key에는 컬럼이 하나 이상 설정할 수 있습니다.

      CONSTRAINT pkeysample PRIMARY KEY (no, sub_no)