Home

(MySQL/MariaDB 완벽 가이드) CREATE TABLE 문법과 기본 키(Primary Key) 설정의 모든 것

Published in mysql_maria
December 08, 2025
3 min read
(MySQL/MariaDB 완벽 가이드) CREATE TABLE 문법과 기본 키(Primary Key) 설정의 모든 것

안녕하세요, 20년 넘게 MySQL과 MariaDB를 다루어 온 ‘코딩하는곰’입니다. 데이터베이스의 핵심은 잘 설계된 테이블 구조에 있습니다. 그 시작이 바로 CREATE TABLE 문과 이를 지탱하는 다양한 제약 조건, 특히 기본 키(Primary Key) 설정입니다. 오늘은 단순한 문법 설명을 넘어, 실무에서 테이블을 설계할 때 꼭 알아야 할 핵심 개념과 숨겨진 팁까지 자세히 알아보겠습니다. 초보자분들도 쉽게 따라올 수 있도록 친절하게 설명드릴 테니, 끝까지 함께해 주세요!

CREATE TABLE: 데이터의 집을 짓는 첫 설계도

데이터베이스에서 테이블은 실제 데이터가 저장되는 가장 기본적인 단위입니다. 마치 엑셀의 워크시트와 같다고 볼 수 있죠. 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, 가변 문자열 nameemail, 날짜형 created_at 컬럼을 가지게 됩니다. 하지만 이 테이블에는 심각한 문제가 있습니다. 바로 각 행을 유일하게 구분할 수 있는 기준이 없다는 점이죠. id가 1인 사용자가 두 명 이상 존재할 수도 있습니다. 이럴 때 필요한 것이 바로 제약 조건(Constraints) 입니다. 제약 조건은 데이터의 정확성과 무결성을 보장하기 위한 규칙입니다. 대표적으로 PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK 등이 있으며, 오늘 우리가 깊이 파헤쳐 볼 것은 이 중에서도 가장 중요한 기본 키(Primary Key)입니다.

(MySQL/MariaDB 완벽 가이드) CREATE TABLE 문법과 기본 키(Primary Key) 설정의 모든 것
(MySQL/MariaDB 완벽 가이드) CREATE TABLE 문법과 기본 키(Primary Key) 설정의 모든 것


💻 프로그래밍에 관심이 많다면, (자바 기초) 산술 연산자 완전 정복 - 코딩하는곰의 자바 강의를 참고해보세요.

기본 키(Primary Key): 테이블의 대표 주민등록번호

기본 키는 테이블에 저장된 각 행(레코드)을 유일하게 식별하는 컬럼 또는 컬럼의 집합입니다. 한국의 주민등록번호, 회사의 사원번호와 같은 개념이죠. 기본 키는 다음과 같은 강력한 특성을 가집니다.

  1. 유일성(UNIQUE): 절대로 중복된 값을 가질 수 없습니다.
  2. 필수성(NOT NULL): NULL 값을 허용하지 않습니다.
  3. 대표성: 하나의 테이블에는 오직 하나의 기본 키만 존재할 수 있습니다. 기본 키를 설정하는 방법은 크게 두 가지입니다. 방법 1: 컬럼 레벨에서 정의하기 (주로 단일 컬럼 키에 사용)
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_idproduct_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 조건으로 기본 키를 사용하는 쿼리의 속도를 비약적으로 향상시킵니다. 따라서 기본 키 컬럼을 통한 조회는 매우 빠르게 처리됩니다.

(MySQL/MariaDB 완벽 가이드) CREATE TABLE 문법과 기본 키(Primary Key) 설정의 모든 것
(MySQL/MariaDB 완벽 가이드) CREATE TABLE 문법과 기본 키(Primary Key) 설정의 모든 것


공부나 업무에 몰입할 때는 별도 설치 없이 바로 실행 가능한 온라인 스톱워치를 이용해보세요.

기본 키 설계의 심화 전략과 주의사항

기본 키를 어떻게 설계하느냐에 따라 시스템의 성능과 유지보수성이 크게 달라집니다. 20년 경험을 통해 터득한 노하우를 몇 가지 공유합니다. 1. 자연 키 vs 대리 키

  • 자연 키(Natural Key): 이메일, 주민등록번호, ISBN 코드 등 비즈니스적으로 이미 존재하는 유일한 값을 사용합니다. 장점은 별도의 컬럼 생성이 필요 없다는 점이지만, 변경 가능성(이메일 변경)이나 개인정보 문제가 발생할 수 있습니다.
  • 대리 키(Surrogate Key): 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. 스토리지 엔진과의 관계
  • InnoDB: MySQL의 기본 엔진. 클러스터형 인덱스를 사용하여 기본 키 값에 따라 물리적인 데이터 저장 순서가 결정됩니다. 따라서 기본 키는 단조 증가(계속 증가하는) 패턴을 사용하는 것이 성능에 유리합니다. 무작위 UUID를 기본 키로 쓰면 페이지 분할이 빈번히 발생해 성능이 저하될 수 있습니다.
  • MyISAM: (현재는 거의 사용되지 않음) 클러스터형 인덱스를 사용하지 않아 기본 키가 물리적 저장 순서에 영향을 주지 않습니다. 4. 실무에서 흔히 하는 실수와 해결법
  • 기본 키 미설정: 절대 금물입니다. 반드시 기본 키를 정의하세요.
  • 너무 긴 컬럼을 기본 키로 사용(예: VARCHAR(500)): 인덱스 크기가 비대해져 성능이 나빠집니다. 대리 키를 도입하세요.
  • 비즈니스 로직과 결합된 기본 키 변경: 자연 키를 기본 키로 썼다가 변경 필요 시 연쇄적인 외래 키 수정이 발생할 수 있습니다. 대리 키의 위력을 다시 한번 상기하세요.
-- 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);

(MySQL/MariaDB 완벽 가이드) CREATE TABLE 문법과 기본 키(Primary Key) 설정의 모든 것
(MySQL/MariaDB 완벽 가이드) CREATE TABLE 문법과 기본 키(Primary Key) 설정의 모든 것


🎭 문화와 예술을 가까이에서 느끼고 싶다면, 2025년 섬 겨울꽃 축제를 참고해보세요.

지금까지 MySQL과 MariaDB에서 CREATE TABLE 문을 통해 테이블을 생성하고, 그 핵심인 기본 키(Primary Key)를 설정하는 방법을 자세히 살펴보았습니다. 기본 키는 단순히 문법을 아는 것을 넘어, 데이터의 정체성을 정의하고 시스템의 성능을 좌우하는 매우 중요한 설계 요소입니다. 처음에는 AUTO_INCREMENT 정수형 대리 키로 시작하는 것을 강력히 추천드립니다. ‘코딩하는곰’의 다음 포스팅에서는 기본 키와 쌍을 이루는 외래 키(FOREIGN KEY)와 데이터 무결성에 대해 더 깊이 파고들 예정입니다. 질문이나 원하는 주제가 있다면 댓글로 남겨주세요! 함께 성장하는 데이터베이스 지식이 되길 바랍니다. 감사합니다.

📣 지금 화제가 되고 있는 문화행사는 바로, 장승포항송년불꽃축제를 참고해보세요.









최상의 건강을 위한 영양가득한 식품과 정보! life-plus.co.kr 바로가기
최상의 건강을 위한 영양가득한 식품과 정보! life-plus.co.kr 바로가기



다채로운 문화축제와 공연 소식을 공유하는 블로그! culturestage.co.kr 바로가기
다채로운 문화축제와 공연 소식을 공유하는 블로그! culturestage.co.kr 바로가기



비트코인 세계로의 첫걸음! 지금 가입하고 거래 수수료 할인 혜택 받으세요! bitget.com 바로가기
비트코인 세계로의 첫걸음! 지금 가입하고 거래 수수료 할인 혜택 받으세요! bitget.com 바로가기




Tags

#developer#coding#mysql_maria

Share

Previous Article
(자바스크립트 마스터하기) DOMContentLoaded vs load 페이지 로딩의 정확한 시점을 잡아라

Related Posts

MySQL/MariaDB 필수 통계 함수 완벽 가이드 COUNT, SUM, AVG 활용법과 실무 예제
December 31, 2025
3 min