(1) Primary key*
(2) Primary key 생성문법
(3) Primary key 예제
(4) Primary key 삭제 문법 및 에제
(5) 테이블에 존재하는 column의 Primary key 생성 문법 및 에제
Primary key 는 테이블 내의 각 행을 고유하게 식별하기 위해 사용되는 하나 이상의 열(column)을 말한다. Primary Key는 데이터의 무결성과 고유성을 보장한다. Primary Key에 대한 설명을 다음과 같은 주요 특징으로 정리할 수 있다.
테이블의 각레코드를식별
중복되지 않은 고유값을 포함
NULL 값을 포함할 수 없음
테이블 당 하나의 기본키를 가짐
테이블에서 특정 행 또는 레코드를 읽거나 변경하려면 레코드끼리 구분할 수 있는 고유의 키가 필요하다. 이러한 고유의 키는 그 행에 값이 있어야 하고 구분을 위한 고유값을 가져야 한다.
🖍️ Primary key 예시
예를 들어 어떤 테이블에 주민등록번호, 사번, 몸무게, 키, 직급, 이름, 핸드폰, 이메일 등과 같은 필드 목록이 있다고 한다. 어떤 필드를 기본키Primary key로 결정할지는 사용자의 선택이지만, 그 중에서 가장 적합한 것을 골라야 한다면 주민등록번호나, 사번 등의 모든 사람이 고유한 값을 가지기 때문에 가장 적합하다.
몸무게나 키, 직급, 이름은 동일하거나 중복값을 가질 수 있기에 고유한 값을 가지는 것이 불가능하고 핸드폰과 이메일은 고유한 값이기도 하지만 핸드폰과 이메일을 소지하지 않거나 값이 바뀌는 경우가 있기에 고유한 값을 가지고 있다고 하기 애매하다.
주민등록번호, 사번처럼 중복되지 않고 고유한 값을 가져서 데이터의 행 또는 레코드를 가장 잘 대표하는 키 하나를 골라 기본키 PRIMARY KEY로 선정한다. 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 값을 허용하지 않는 것을 의미한다. 해당 column은 primary key 가 되어야 하는 컬럼이기 때문에 NULL 값을 허용하지 않아야 하는 것이다.
CONSTRAINT constraint_name: 여기에서 constraint_name은 제약 조건의 이름을 지정하는 것이다. 이는 데이터베이스 내에서 제약 조건을 고유하게 식별하는 데 사용된다. 이름을 지정하면 나중에 제약 조건을 참조하거나 수정할 때 유용하다. Primary key 기본 키를 줄 때 CONSTRAINT를 생략해도 무관하다.
PRIMARY KEY (column): 기본 키(Primary Key)는 테이블 내의 각 레코드를 고유하게 식별하는 데 사용되며 PRIMARY KEY () 괄호 내에 행을 가장 잘 대표할 수 있는 고유의 키가 되는 column 을 넣으면 된다.
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)
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)
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_animal은 PRIMARY 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)