본문 바로가기
DB(Data Base)/Mysql, MariaDB

[Mysql, MariaDB] PrimaryKey, Autoincrement 설정방법

1. Primary key란?

 

Primary Key 혹은 기본키라고 불리어지는 이 키는 테이블에 오직 한개만 존재하는 키 입니다. 기본키로 지정되는 순간 NOT NULL과 UNIQUE제약 조건의 특징을 가지게 되며 하나 이상의 컬럼이 그룹화 되어 기본키로 사용되는 경우도 있습니다. 기본적으로 테이블을 생성할 때 특정컬럼에 기본키를 설정하여 생성하지만 이미 생성된 테이블이라 할지라도 기본키를 설정할 수 있습니다. 아래의 코드를 통해 기본키에 관련된 쿼리문을 살펴보겠습니다.

 

 

테이블을 만들면서 기본키도 같이 지정하는 쿼리문입니다.

 

CREATE TABLE Test 
(
    ID INT PRIMARY KEY,
    Name VARCHAR(30)
)

 

 

 

새로운 컬럼을 추가하면서 기본키도 같이 지정해 주는 쿼리문입니다.

 

ALTER TABLE test
ADD ADDFILD VARCHAR(20) PRIMARY KEY

 

 

 

기존에 존재하는 컬럼을 기본키로 설정하는 쿼리문입니다. 기존 컬럼을 기본키로 절정할 경우 기존 컬럼에 NULL값이 없는지 미리 확은을 해야합니다.

 

ALTER TABLE test
MODIFY COLUMN ID INT PRIMARY KEY

 

 

 

아래의 쿼리문은 기존에 가지고 있던 기본키를 삭제하는 쿼리입니다.

 

ALTER TABLE test
DROP PRIMARY KEY

 

 

 

 

 

2. Auto Increment

 

테이블에 값을 입력하다보면 자동으로 값이 증가하면서 입력해야 하는 경우가 있습니다. 이럴경우 auto increment를 사용하는데 아래 쿼리문을 통해서 어떻게 설정하는지 알아보겠습니다.

 

 

CREATE TABLE test(
num int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(10) NOT NULL
)

 

 

물론 이미 생성된 컬럼에 auto increment를 추가하는 방법도 있습니다.

 

ALTER TABEL TEST MODIFY num INT NOT NULL AUTO_INCREMENT

 

 

auto increment값을 초기화 하는 쿼리문입니다.

 

ALTER TABLE test AUTO_INCREMENT = 1

 

 

추가적으로 auto increment를 사용하여 순차적으로 1부터 10까지 데이터를 넣었다가 6 ~ 10 에대한 값을 지우고 insert를 진행하면 당연히 11이라는 값이 들어갑니다. 하지만 db를 재시작한다면 어떻게 될까요? Mysql기준으로 파일 기반 스토리지 엔진인 MyISAM의 경우 auto_increment값은 그대로 11 입니다. auto_increment값을 파일에 일일이 기록해놓기때문입니다. 그러나 메모리 기반 스토리지 엔진인 Inno DB는 auto_increment값이 11이 아닌 6이 됩니다. mysql을 처음 시작할때 마다 메모리상에 SELECT MAX(num) FROM test for UPDATE로 auto_increment값을 새로 저장하기 때문인데요 물론 num값을 참조하는 키값들의 종속성을 잘 설정해두면 문제될 것은 없지만 InnoDB에서 Auto_Increment를 사용할 경우 이와같은 특성을 이해하고 사용하는 것이 예기치 않은 장애사항을 예방하는 방법이되겠습니다.

 

 

 

 

 

 

'DB(Data Base) > Mysql, MariaDB' 카테고리의 다른 글

[Mysql, MariaDB] Group By, Having절 사용하기  (0) 2019.10.23

댓글