[SQL] : Primary key

김대현·2024년 6월 12일

(1) Primary key*
(2) Primary key 생성문법
(3) Primary key 예제
(4) Primary key 삭제 문법 및 에제
(5) 테이블에 존재하는 column의 Primary key 생성 문법 및 에제

(1) Primary key

  • Primary key 는 테이블 내의 각 행을 고유하게 식별하기 위해 사용되는 하나 이상의 열(column)을 말한다. Primary Key는 데이터의 무결성과 고유성을 보장한다. Primary Key에 대한 설명을 다음과 같은 주요 특징으로 정리할 수 있다.

  • 테이블의 각레코드를식별

  • 중복되지 않은 고유값을 포함

  • NULL 값을 포함할 수 없음

  • 테이블 당 하나의 기본키를 가짐

  • 테이블에서 특정 행 또는 레코드를 읽거나 변경하려면 레코드끼리 구분할 수 있는 고유의 키가 필요하다. 이러한 고유의 키는 그 행에 값이 있어야 하고 구분을 위한 고유값을 가져야 한다.

🖍️ Primary key 예시

  • 예를 들어 어떤 테이블에 주민등록번호, 사번, 몸무게, 키, 직급, 이름, 핸드폰, 이메일 등과 같은 필드 목록이 있다고 한다. 어떤 필드를 기본키Primary key로 결정할지는 사용자의 선택이지만, 그 중에서 가장 적합한 것을 골라야 한다면 주민등록번호나, 사번 등의 모든 사람이 고유한 값을 가지기 때문에 가장 적합하다.

  • 몸무게나 키, 직급, 이름은 동일하거나 중복값을 가질 수 있기에 고유한 값을 가지는 것이 불가능하고 핸드폰과 이메일은 고유한 값이기도 하지만 핸드폰과 이메일을 소지하지 않거나 값이 바뀌는 경우가 있기에 고유한 값을 가지고 있다고 하기 애매하다.

  • 주민등록번호, 사번처럼 중복되지 않고 고유한 값을 가져서 데이터의 행 또는 레코드를 가장 잘 대표하는 키 하나를 골라 기본키 PRIMARY KEY로 선정한다. Primary key는 이외에도 실제로 자주 사용되는 학번 같이 쉽게 찾을 수 있는 값 그리고 조회가 빠르고 컴퓨터가 값을 빠르게 읽고 처리할 수 있게 레코드 내에서 비교적 다른 값보다 짧고 간결한 값을 선정하면 좋다.



(2) Primary key 문법

CREATE TABLE tablename
(
  column datatype NOT NULL,
  ...
  CONSTRAINT constraint_name
  PRIMARY KEY (column1, column2, ...)
);
  • CREATE TABLE tablename: tablename 이라는 이름의 테이블을 생성한다.

  • column datatype NOT NULL: NOT NULL 제약 조건은 이 컬럼에 NULL 값을 허용하지 않는 것을 의미한다. 해당 columnprimary key 가 되어야 하는 컬럼이기 때문에 NULL 값을 허용하지 않아야 하는 것이다.

  • CONSTRAINT constraint_name: 여기에서 constraint_name은 제약 조건의 이름을 지정하는 것이다. 이는 데이터베이스 내에서 제약 조건을 고유하게 식별하는 데 사용된다. 이름을 지정하면 나중에 제약 조건을 참조하거나 수정할 때 유용하다. Primary key 기본 키를 줄 때 CONSTRAINT를 생략해도 무관하다.

  • PRIMARY KEY (column): 기본 키(Primary Key)는 테이블 내의 각 레코드를 고유하게 식별하는 데 사용되며 PRIMARY KEY () 괄호 내에 행을 가장 잘 대표할 수 있는 고유의 키가 되는 column 을 넣으면 된다.



(3) Primary key 예제

CREATE TABLE person
(
  pid int NOT NULL,
  name varchar(16),
  age int,
  sex char,
  PRIMARY KEY (pid)
);
  • pid int NOT NULL: pid는 컬럼의 이름이고 int는 데이터 타입으로 정수를 저장한다는 것이다. NOT NULL 제약 조건은 이 컬럼이 NULL 값을 가질 수 없음을 의미한다.

  • name varchar(16): name은 컬럼의 이름이고 varchar(16)은 문자열을 저장하며 값이 될 문자열의 최대 길이는 16자이다. 별도의 NOT NULL 제약 조건이 없어 이 컬럼은 NULL 값을 가질 수 있다.

  • age int: age는 컬럼의 이름이고 int는 데이터 타입으로 정수를 저장한다는 것이다. 똑같이 이 컬럼은 NULL 값을 가질 수 있다.

  • sex char: sex는 컬럼의 이름이고 char 는 고정 길이 문자열을 저장하는 것으로 길이를 따로 정하지 않았지만 보통 1자로 사용된다. 똑같이 이 컬럼은 NULL 값을 가질 수 있다.

- PRIMARY KEY (pid): pid 컬럼을 고유한 기본 키(Primary Key)로 설정하는 것이다. pid 컬럼이 기본 키이므로, 각 pid 행의 값은 테이블 내에서 고유해야 하고 NULL 값을 가질 수 없다.


  • 쿼리 실행 결과
mysql> desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| pid   | int         | NO   | PRI | NULL    |       |
| name  | varchar(16) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
| sex   | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

🖍️ 여러개의 칼럼을 기본키로 설정하는 경우

CREATE TABLE person
(
  name varchar(16) NOT NULL,
  type varchar(16) NOT NULL,
  age int,
  PRIMARY KEY (name, type)
);
  • 쿼리 실행 결과
mysql> desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(16) | YES  |     | NULL    |       |
| type  | varchar(16) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)



(4) Primary key 삭제 문법 및 에제

mysql> ALTER TABLE person DROP PRIMARY KEY;
  • ALTER TABLE person:ALTER TABLE 명령어는 기존 테이블의 구조를 변경할 때 사용되며 변경할 테이블로person을 지정하는 것이다.

  • DROP PRIMARY KEY: DROP PRIMARY KEY 명령어는 테이블의 현재 기본 키를 삭제하는 것이다.

  • 여러개의 칼럼이 기본키로 설정된 경우에도 삭제하는 방법은 동일하다.

  • 쿼리 실행 결과
mysql> desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| pid   | int         | NO   |     | NULL    |       |
| name  | varchar(16) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
| sex   | char(1)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

(5) 테이블에 존재하는 column의 Primary key 생성 문법 및 에제

mysql> ALTER TABLE person ADD PRIMARY KEY (id);

mysql> ALTER TABLE animal ADD CONSTRAINT PK_animal PRIMARY KEY (name, type);

  • ADD PRIMARY KEY (id): ADD PRIMARY KEY 명령어는 이미 존재하는 특정 테이블을 지정하고 테이블 내에 지정된 컬럼에 기본 키 제약 조건을 추가하는 것이다. (id)는 기본 키로 설정할 컬럼의 이으로 기본 키가 되어, 해당 행 또는 레코드를 대표하게 된다. 테이블 내에서 고유한 값만 가질 수 있고 NULL 값을 가질 수 없다.
  • ADD CONSTRAINT PK_animal PRIMARY KEY (name, type);: 해당 쿼리는 여러 개의 컬럼을 기본키로 지정하는 경우이다. ADD CONSTRAINT 명령어는 새로운 제약 조건을 추가할 때 사용된다. PK_animalPRIMARY KEY 기본 키를 PK로 줄이고 기본 키를 지정하고 싶은 테이블을 지정하는 것이다. 이는 명명된 제약 조건으로, 나중에 제약 조건을 참조하거나 수정할 때 유용하다.

  • 쿼리 실행 결과
mysql> desc person;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(16) | YES  | PRI | NULL    |       |
| type  | varchar(16) | YES  | PRI | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

-참고자료
https://thinpig-data.tistory.com/entry/PRIMARY-KEY%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-feat-CANDIDATE-KEY-COMPOSITE-KEY-UNIQUE

https://developjuns.tistory.com/34

profile
데이터 분석 스쿨 블로그 입니다.

0개의 댓글