분명 빙터파크 프로젝트 DDL 작성할 때 팀원에게 배웠는데, 이후 진행한 프로젝트에서 깜박 잊고 말았다…😥 미래의 나를 위해 다시 블로그를 활성화 하려고 한다.
id BIGINT AUTO_INCREMENT PRIMARY KEY
AUTO_INCREMENT는 기본적으로 1부터 시작하며, 고유한 식별자를 생성하는 데 사용되어 기본키로 자주 사용된다.
이때, 만약 누군가 id 컬럼에 음수 값을 넣으려고 시도하면 어떻게 될까?
정수형 데이터는 기본적으로 SIGNED로 선언되어 부호가 있기 때문에 음수 값이 삽입된다.
기본키는 일반적으로 레코드를 고유하게 식별하기 위한 목적으로 사용되며, 음수 값은 이러한 목적에 부합하지 않다.
UNSIGNED로 선언된 컬럼은 부호 비트를 제거해 저장 가능한 양수 범위를 두배로 늘리는 역할을 한다.
아래는 정수형 데이터 타입의 범위이다.
| 데이터 타입 | 저장 공간 | signed | unsigned |
|---|---|---|---|
| TINYINT | 1 바이트 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 바이트 | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 바이트 | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT (INTEGER) | 4 바이트 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 바이트 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 |
데이터 무결성을 보장하고, 메모리 최적화를 위해 음수 범위가 필요하지 않은 정수형 컬럼에는 UNSIGNED를 선언하는 것이 좋다!
id BIGINT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY
SIGNED, UNSIGNED가 익숙해서 다시 생각해보니 C언어에서 사용했었다! 자바에는 따로 UNSIGNED 정수 타입이 존재하지는 않지만, 자바8부터는 Integer.parseUnsignedInt() 메서드를 이용해서 부호 없는 정수 데이터를 다룰 수 있다고 한다.