안녕하세요, 20년 넘게 MySQL과 MariaDB를 다루어 온 ‘코딩하는곰’입니다. 데이터베이스의 핵심은 잘 설계된 테이블 구조에 있습니다. 그 시작이 바로 CREATE TABLE 문과 이를 지탱하는 다양한 제약 조건, 특히 기본 키(Primary Key) 설정입니다. 오늘은 단순한 문법 설명을 넘어, 실무에서 테이블을 설계할 때 꼭 알아야 할 핵심 개념과 숨겨진 팁까지 자세히 알아보겠습니다. 초보자분들도 쉽게 따라올 수 있도록 친절하게 설명드릴 테니, 끝까지 함께해 주세요!
데이터베이스에서 테이블은 실제 데이터가 저장되는 가장 기본적인 단위입니다. 마치 엑셀의 워크시트와 같다고 볼 수 있죠. CREATE TABLE 명령어는 이런 데이터의 ‘집’을 짓기 위한 설계도를 정의하는 작업입니다. 문법의 기본 골격은 다음과 같습니다.
CREATE TABLE [IF NOT EXISTS] 테이블명 (컬럼1_이름 데이터_타입 [제약조건],컬럼2_이름 데이터_타입 [제약조건],...[테이블_레벨_제약조건]) [테이블_옵션];
가장 간단한 사용자 정보 테이블을 만들어 보겠습니다.
CREATE TABLE users (id INT,name VARCHAR(100),email VARCHAR(255),created_at DATETIME);
이렇게 만들면 users라는 이름의 테이블이 생성되고, 정수형 id, 가변 문자열 name과 email, 날짜형 created_at 컬럼을 가지게 됩니다. 하지만 이 테이블에는 심각한 문제가 있습니다. 바로 각 행을 유일하게 구분할 수 있는 기준이 없다는 점이죠. id가 1인 사용자가 두 명 이상 존재할 수도 있습니다. 이럴 때 필요한 것이 바로 제약 조건(Constraints) 입니다. 제약 조건은 데이터의 정확성과 무결성을 보장하기 위한 규칙입니다. 대표적으로 PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK 등이 있으며, 오늘 우리가 깊이 파헤쳐 볼 것은 이 중에서도 가장 중요한 기본 키(Primary Key)입니다.
💻 프로그래밍에 관심이 많다면, (자바 기초) 산술 연산자 완전 정복 - 코딩하는곰의 자바 강의를 참고해보세요.
기본 키는 테이블에 저장된 각 행(레코드)을 유일하게 식별하는 컬럼 또는 컬럼의 집합입니다. 한국의 주민등록번호, 회사의 사원번호와 같은 개념이죠. 기본 키는 다음과 같은 강력한 특성을 가집니다.
CREATE TABLE users (id INT PRIMARY KEY, -- id 컬럼을 기본 키로 설정name VARCHAR(100) NOT NULL,email VARCHAR(255));
방법 2: 테이블 레벨에서 정의하기 (복합 키나 키 이름 지정 시 유용)
CREATE TABLE users (id INT,name VARCHAR(100) NOT NULL,email VARCHAR(255),CONSTRAINT pk_users_id PRIMARY KEY (id) -- 'pk_users_id'라는 이름의 기본 키 제약 조건 생성);
복합 기본 키(Composite Primary Key)는 두 개 이상의 컬럼을 조합하여 유일성을 보장할 때 사용합니다. 주문 상세 테이블에서 order_id와 product_id를 함께 기본 키로 쓰는 경우가 대표적이죠.
CREATE TABLE order_details (order_id INT,product_id INT,quantity INT,PRIMARY KEY (order_id, product_id) -- 두 컬럼의 조합이 유일해야 함);
이 경우, (1, 101) 조합은 하나만 존재할 수 있지만, order_id 1이 다른 product_id와는 여러 번 결합될 수 있습니다.
기본 키의 가장 큰 장점은 자동으로 인덱스(Index)가 생성된다는 점입니다. 이 인덱스는 WHERE id = ? 또는 JOIN 조건으로 기본 키를 사용하는 쿼리의 속도를 비약적으로 향상시킵니다. 따라서 기본 키 컬럼을 통한 조회는 매우 빠르게 처리됩니다.
공부나 업무에 몰입할 때는 별도 설치 없이 바로 실행 가능한 온라인 스톱워치를 이용해보세요.
기본 키를 어떻게 설계하느냐에 따라 시스템의 성능과 유지보수성이 크게 달라집니다. 20년 경험을 통해 터득한 노하우를 몇 가지 공유합니다. 1. 자연 키 vs 대리 키
AUTO_INCREMENT 정수나 UUID처럼 비즈니스 의미 없이 시스템에서 생성한 값을 사용합니다. 현대 데이터베이스 설계의 사실상 표준입니다. 비즈니스 로직 변경에 영향을 받지 않고, 크기가 작아 인덱스 효율이 매우 좋습니다.
2. AUTO_INCREMENT의 마스터리
대리 키로 가장 많이 사용되는 AUTO_INCREMENT를 활용한 예제입니다.CREATE TABLE articles (article_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -- UNSIGNed로 범위 확대title VARCHAR(200) NOT NULL,content TEXT,view_count INT DEFAULT 0,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB AUTO_INCREMENT=1000; -- 1000번부터 시작
UNSIGNED: 음수를 허용하지 않아 양수 범위를 두 배로 늘려줍니다.DEFAULT 값 설정: 데이터 삽입 시 값을 생략할 수 있습니다.AUTO_INCREMENT=1000: 초기 시작 값을 설정할 수 있습니다.
3. 스토리지 엔진과의 관계-- IF NOT EXISTS 를 활용한 안전한 생성CREATE TABLE IF NOT EXISTS users (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,...);-- 기존 테이블에 기본 키 추가하기 (데이터 중복 체크 필수!)ALTER TABLE existing_table ADD PRIMARY KEY (id);
🎭 문화와 예술을 가까이에서 느끼고 싶다면, 2025년 섬 겨울꽃 축제를 참고해보세요.
지금까지 MySQL과 MariaDB에서 CREATE TABLE 문을 통해 테이블을 생성하고, 그 핵심인 기본 키(Primary Key)를 설정하는 방법을 자세히 살펴보았습니다. 기본 키는 단순히 문법을 아는 것을 넘어, 데이터의 정체성을 정의하고 시스템의 성능을 좌우하는 매우 중요한 설계 요소입니다. 처음에는 AUTO_INCREMENT 정수형 대리 키로 시작하는 것을 강력히 추천드립니다. ‘코딩하는곰’의 다음 포스팅에서는 기본 키와 쌍을 이루는 외래 키(FOREIGN KEY)와 데이터 무결성에 대해 더 깊이 파고들 예정입니다. 질문이나 원하는 주제가 있다면 댓글로 남겨주세요! 함께 성장하는 데이터베이스 지식이 되길 바랍니다. 감사합니다.
📣 지금 화제가 되고 있는 문화행사는 바로, 장승포항송년불꽃축제를 참고해보세요.
