AD JB Toolbox 01

MariaDB 강좌 / CREATE TABLE로 테이블 구조 정의하기

CREATE TABLE은 열 이름·데이터 타입·입력 조건과 키를 정해 새 테이블을 만드는 SQL 문장입니다. 테이블을 만들었다는 사실과 올바른 구조로 만들었다는 사실은 다르므로, 실행 후에는 DESCRIBE와 SHOW CREATE TABLE로 실제 정의를 확인해야 합니다.

테이블을 만들기 전에 열의 역할 정하기

스키마(schema)는 데이터를 어떤 구조로 저장할지 정한 정의를 뜻합니다. 이 글에서는 상품 한 건을 한 행에 담고, 식별 번호·이름·분류·가격·재고를 각각 열로 나눕니다. 화면에 보이는 모든 글자를 하나의 문자열 열에 저장하면 정렬과 계산, 입력 검사에 불필요한 변환이 생깁니다.

저장할 값 열 이름과 정의 설계 이유
상품 식별 번호 product_id INT / 기본키·자동 증가 이름이 같은 상품도 별도의 행으로 구분
상품 이름 product_name VARCHAR(100) NOT NULL 길이가 달라지는 문자열이며 값 누락은 허용하지 않음
상품 분류 category VARCHAR(30) NOT NULL 분류명을 문자열로 저장
가격 price DECIMAL(10,2) NOT NULL 소수 두 자리의 금액을 정확한 숫자로 보관
재고 stock INT NOT NULL DEFAULT 0 입력 생략 시 0을 사용하되 음수 제한은 별도 CHECK가 필요

열의 최대 길이는 예상 입력과 업무 규칙을 기준으로 정합니다. 관련 조건은 문자열 저장과 길이에서 구체적으로 설명합니다. 100이라는 값은 모든 상품명에 맞는 정답이 아니며, 이름이 더 길 수 있는 서비스라면 입력 정책과 스키마를 함께 조정해야 합니다. 가격·재고에 음수를 허용할지는 타입 선택과 별개의 업무 조건입니다. 관련 조건은 NULL·기본값·입력 제약에서 구체적으로 설명합니다.

접속과 기존 테이블 확인

2~5강에서 준비한 course_user로 shopcourse 데이터베이스에 접속한 상태에서 실행합니다. 접속·SQL 파일 실행 방법은 명령줄 클라이언트 설명을 참고하세요. 서버 버전과 선택한 데이터베이스를 먼저 확인하고, 운영 데이터가 들어 있는 연결에서는 이 실습을 실행하지 않습니다.

SELECT VERSION() AS server_version, DATABASE() AS selected_database;
USE shopcourse;
SELECT DATABASE() AS selected_database;

6강의 상품 테이블은 그대로 두고 새 이름인 products_schema_lab을 사용합니다. 먼저 다음 조회로 같은 이름의 테이블이 없는지 확인합니다. 이미 있으면 구조와 데이터를 살펴본 뒤 마지막 구역의 반복 실습 절차를 선택하세요.

SHOW TABLES LIKE 'products_schema_lab';

테이블 이름은 소문자와 밑줄로 통일하고 예약어와 혼동되는 이름은 피합니다. 예제의 소문자는 운영체제와 서버 설정에 따른 이름 처리 차이로 생기는 혼동을 줄이기 위한 규칙입니다. 테이블 이름과 문자열 값은 서로 다르므로, 상품명에는 작은따옴표를 사용합니다.

실행 가능한 CREATE TABLE 전체 예제

USE shopcourse;
CREATE TABLE products_schema_lab (
  product_id INT NOT NULL AUTO_INCREMENT,
  product_name VARCHAR(100) NOT NULL,
  category VARCHAR(30) NOT NULL,
  price DECIMAL(10,2) NOT NULL,
  stock INT NOT NULL DEFAULT 0,
  PRIMARY KEY (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO products_schema_lab (product_name, category, price)
VALUES ('노트', '문구', 3500.00);
SHOW TABLES LIKE 'products_schema_lab';
DESCRIBE products_schema_lab;
SHOW CREATE TABLE products_schema_lab;
SELECT product_id, product_name, price, stock FROM products_schema_lab;

CREATE TABLE 뒤의 괄호에는 열 정의와 테이블 단위의 조건을 쉼표로 구분합니다. 마지막 정의 뒤에는 쉼표를 붙이지 않습니다. PRIMARY KEY (product_id)는 지정한 열로 행을 구별한다는 선언이고, AUTO_INCREMENT는 번호 입력을 생략할 때 서버가 값을 생성하도록 하는 속성입니다.

ENGINE은 저장 엔진, 즉 테이블 데이터를 저장하고 처리하는 구현을 지정합니다. 여기서는 트랜잭션과 이후 관계 실습에 사용할 InnoDB를 명시합니다. 문자 집합 utf8mb4와 정렬 규칙 utf8mb4_unicode_ci는 한글 저장과 문자 비교의 기준을 분명하게 정합니다. 이 설정이 모든 서비스의 검색 정책에 가장 알맞다는 뜻은 아닙니다.

INSERT에서 상품 번호와 재고 열을 생략했으므로 새 테이블의 첫 행 번호는 1, 재고는 기본값 0이 됩니다. price에 값을 넣었기 때문에 NOT NULL 조건도 충족합니다. 전체 파일을 저장해 실행하는 경우에는 SQL 문장 사이의 세미콜론도 그대로 유지합니다.

실제 구조와 첫 행 확인하기

확인 명령 확인할 내용
DESCRIBE Field·Type·Null·Key·Default·Extra에서 열 타입, NULL 허용, 기본키와 auto_increment 확인
SHOW CREATE TABLE 저장 엔진·문자 집합·정렬 규칙과 전체 생성 정의 확인
SELECT 1 / 노트 / 3500.00 / 0인 첫 행 확인

서버가 출력하는 타입 표기에는 int(11)처럼 표시 폭에 관한 표기가 포함될 수 있습니다. 괄호의 숫자를 정수 최대값이나 저장 바이트 수로 해석하지 않습니다. 같은 설계라도 버전이나 SQL 모드에 따라 정규화된 정의의 표시 방식은 달라질 수 있습니다.

SHOW CREATE TABLE은 실행 결과를 확인하고 구조를 기록할 때 유용합니다. 다만 그 결과 한 문장만으로 데이터까지 백업되는 것은 아닙니다. 생성 문법과 기본값 처리의 자세한 조건은 MariaDB CREATE TABLE 공식 문서에서 확인할 수 있습니다.

이미 있는 테이블과 IF NOT EXISTS 구분하기

같은 이름을 다시 CREATE TABLE하면 테이블이 이미 있다는 오류가 발생합니다. 이는 기존 테이블을 몰래 교체하지 않도록 하는 확인 지점입니다. IF NOT EXISTS를 넣으면 이미 존재할 때 생성을 건너뛸 수 있지만, 기존 열이나 제약 조건을 새 선언과 동일하게 바꾸지는 않습니다.

CREATE TABLE IF NOT EXISTS products_schema_lab (only_column INT);
SHOW WARNINGS;
DESCRIBE products_schema_lab;

위 문장을 실행해도 기존 상품 열이 only_column 하나로 바뀌지 않습니다. 구조가 잘못되었다면 ALTER TABLE 등 변경 절차가 필요하며, 운영 테이블을 삭제하고 다시 만드는 방식으로 해결하지 않습니다. CREATE OR REPLACE TABLE도 기존 테이블을 대체할 수 있으므로 단순한 오류 회피용으로 사용하지 않습니다.

오류를 확인하고 실습 다시 시작하기

증상 확인할 사항
No database selected USE shopcourse를 실행했는지 확인
Table already exists 같은 이름의 테이블 정의·데이터를 조회
SQL 문법 오류 열 사이 쉼표, 마지막 쉼표, 괄호와 세미콜론 확인
권한 오류 course_user의 접속 주소와 shopcourse 범위 권한 확인

반복 실습 전에는 SELECT DATABASE();와 SHOW CREATE TABLE 테이블명;으로 대상이 이 강좌에서 만든 실습 테이블인지 확인합니다. 보관할 데이터가 있다면 먼저 백업합니다. 아래 명령은 지정한 테이블과 그 안의 데이터를 삭제하므로 확인한 학습용 테이블에만 실행하세요.

DROP TABLE shopcourse.products_schema_lab;

삭제 후에는 본문의 전체 예제를 다시 실행할 수 있습니다. DROP TABLE 같은 데이터 정의 문장은 일반적인 트랜잭션의 ROLLBACK으로 복구할 수 있다고 기대하지 않습니다. 기존 products 테이블은 이 초기화 대상에 포함하지 않습니다.

같은 카테고리의 다른 글
MariaDB 강좌 / Ubuntu에 MariaDB 설치하고 서버 실행하기

MariaDB 강좌 / Ubuntu에 MariaDB 설치하고 서버 실행하기

Ubuntu APT 설치 후 서버 실행·자동 시작·관리자 소켓 인증을 확인합니다. 로컬 TCP 학습 계정을 만들고 패키지 버전, 인증 오류와 서비스 로그를 확인하는 절차를 설명합니다.

MariaDB / 연산자 / 비교 연산자

MariaDB / 연산자 / 비교 연산자

MariaDB의 비교 연산자에 대하여 알아보겠습니다. 예제로 사용하는 테이블은 아래의 데이터를 가진 T_1이라는 테이블입니다. 각 열의 데이터 형식은 다음과 같습니다. C_1 : 정수 C_2 : 문자 C_3 : 날짜 +----+------+------+------------+ | ID | C_1 | C_2 | C_3 | +----+------+------+------------+ | 1 | 1 | ...

MariaDB 강좌 / 날짜와 시간 저장하기: DATE·DATETIME·TIMESTAMP

MariaDB 강좌 / 날짜와 시간 저장하기: DATE·DATETIME·TIMESTAMP

DATE·DATETIME·TIMESTAMP의 저장 의미와 시간대 처리를 비교합니다. 동일 입력의 한국 시간·UTC 조회 결과, 버전별 TIMESTAMP 범위, 날짜 오류와 설정 복원을 실습합니다.

MariaDB 강좌 / 기본키·AUTO_INCREMENT·UNIQUE로 행 식별하기

MariaDB 강좌 / 기본키·AUTO_INCREMENT·UNIQUE로 행 식별하기

기본키·자동 증가·고유 제약을 고객 데이터로 구분하고 중복 입력을 확인합니다. nullable UNIQUE, 복합 기본키와 트랜잭션 취소 후 자동 번호가 빠지는 경우를 실습합니다.

MariaDB / 연산자 / 논리 연산자

MariaDB / 연산자 / 논리 연산자

MariaDB의 논리 연산자에 대하여 알아보겠습니다. 예제로 사용하는 테이블은 아래의 데이터를 가진 T_2이라는 테이블입니다. 각 열의 데이터 형식은 다음과 같습니다. C_1 : 정수 C_2 : 문자 +----+------+------+ | ID | C_1 | C_2 | +----+------+------+ | 1 | 1 | A | | 2 | ...

MariaDB / 샘플 데이터베이스 employees 설치하는 방법

MariaDB / 샘플 데이터베이스 employees 설치하는 방법

데이터베이스를 다루는 공부를 할 때 데이터가 들어있는 데이터베이스가 있으면 좋습니다. 데이터베이스를 직접 만드는 방법도 있지만, 공개된 샘플 데이터베이스를 이용하면 편합니다. 예를 들어 SQL Server라면 AdventureWorks라는 샘플 데이터베이스를 마이크로소프트에서 제공합니다. MariaDB라면 employees를 사용하면 됩니다.

MariaDB 강좌 / MariaDB란? 데이터베이스·SQL·MySQL과의 관계

MariaDB 강좌 / MariaDB란? 데이터베이스·SQL·MySQL과의 관계

MariaDB 서버·클라이언트와 데이터베이스·테이블·행·열의 관계를 상품 예제로 이해합니다. SQL의 역할, MySQL과의 관계, 이후 강좌에서 사용할 실습 환경을 구분합니다.

MariaDB / 데이터베이스 저장 위치 변경하는 방법

MariaDB / 데이터베이스 저장 위치 변경하는 방법

MariaDB의 버전이 12.1이라고 할 때, 윈도우용 MariaDB의 기본 설치 위치는 C:\Program Files\MariaDB 12.1, 데이터베이스 저장 위치는 C:\Program Files\MariaDB 12.1\data입니다. 데이터베이스 저장 위치를 다음으로 변경해보겠습니다. D:\Database\MariaDB\data

MariaDB 강좌 / Windows에 MariaDB 설치하고 서버 실행하기

MariaDB 강좌 / Windows에 MariaDB 설치하고 서버 실행하기

Windows MSI 설치에서 서버·클라이언트, 관리자 인증, 서비스와 포트를 설정합니다. SQL 실행을 확인하고 이후 강좌에서 사용할 학습용 계정을 준비하며 시작·접속 오류를 점검합니다.

MariaDB 강좌 / 첫 실습: 상품 테이블을 만들고 데이터를 넣어 조회하기

MariaDB 강좌 / 첫 실습: 상품 테이블을 만들고 데이터를 넣어 조회하기

상품 세 건을 저장하는 전체 SQL로 테이블 생성·입력·조회 과정을 실습합니다. 구조와 행 수, 가격·재고 조건의 예상 결과를 확인하고 반복 입력 오류와 실습 테이블 초기화 범위를 구분합니다.