DB

[MySQL] CREATE 완벽 가이드 사용법(데이터베이스와 테이블 생성)

인생아 2024. 12. 18. 23:42
반응형

MySQL은 데이터베이스 관리에 널리 사용되는 관계형 데이터베이스 관리 시스템(RDBMS)입니다. CREATE 명령어는 데이터베이스, 테이블, 뷰, 인덱스 등을 생성할 때 사용하는 SQL 문입니다.

CREATE DATABASE: 데이터베이스 생성

CREATE DATABASE 명령어는 새로운 데이터베이스를 생성할 때 사용됩니다. 데이터베이스는 데이터를 저장할 테이블과 기타 객체를 포함하는 논리적인 컨테이너입니다.

문법

CREATE DATABASE 데이터베이스명;

옵션 설명

  • IF NOT EXISTS: 동일한 이름의 데이터베이스가 이미 존재하는 경우 에러를 방지합니다.
  • CHARACTER SET: 데이터베이스의 문자 집합을 지정합니다.
  • COLLATE: 데이터 정렬 방식을 설정합니다.

예제

-- 기본 데이터베이스 생성
CREATE DATABASE my_database;

-- 동일한 이름의 데이터베이스가 있을 경우 생성을 무시
CREATE DATABASE IF NOT EXISTS my_database;

-- 문자 집합과 정렬 방식 지정
CREATE DATABASE my_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
 

CREATE TABLE: 테이블 생성

CREATE TABLE 명령어는 데이터를 저장할 테이블을 생성합니다. 테이블은 **행(Row)**과 **열(Column)**로 구성되며, 각 열은 데이터 유형과 속성을 가집니다.

문법

CREATE TABLE 테이블명 (
    열1 데이터타입 [속성],
    열2 데이터타입 [속성],
    ...
);

옵션 설명

  • PRIMARY KEY: 테이블에서 각 행을 고유하게 식별할 수 있는 열을 지정합니다.
  • AUTO_INCREMENT: 숫자 데이터가 자동으로 증가하도록 설정합니다.
  • DEFAULT: 열에 기본값을 지정합니다.
  • NOT NULL: 특정 열에 NULL 값을 허용하지 않습니다.

예제

-- 기본 테이블 생성
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 복합 PRIMARY KEY 설정
CREATE TABLE orders (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);

 

반응형

CREATE INDEX: 인덱스 생성

인덱스는 테이블 검색 속도를 향상시키기 위해 사용됩니다. 인덱스를 생성하면 특정 열에 대한 데이터를 빠르게 검색할 수 있습니다.

문법

CREATE INDEX 인덱스명 ON 테이블명(열명);

예제

-- 단일 열에 인덱스 생성
CREATE INDEX idx_username ON users(username);

-- 여러 열에 인덱스 생성
CREATE INDEX idx_order_product ON orders(order_id, product_id);
 

CREATE VIEW: 뷰 생성

뷰(View)는 하나 이상의 테이블에서 데이터를 조회하기 위한 가상 테이블입니다. 실제 데이터를 저장하지 않으며, 쿼리를 단순화하고 재사용성을 높입니다.

문법

CREATE VIEW 뷰명 AS
SELECT 열1, 열2
FROM 테이블명
WHERE 조건;

예제

-- 전체 사용자 데이터를 조회하는 뷰 생성
CREATE VIEW all_users AS
SELECT id, username, email
FROM users;

-- 특정 조건을 가진 데이터를 조회하는 뷰
CREATE VIEW recent_orders AS
SELECT order_id, product_id, quantity
FROM orders
WHERE created_at > NOW() - INTERVAL 30 DAY;
 

복잡한 예제: 사용자와 주문 테이블

다음은 데이터베이스와 여러 테이블을 생성하고 관계를 설정하는 종합 예제입니다.

-- 데이터베이스 생성
CREATE DATABASE ecommerce
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

-- 데이터베이스 사용
USE ecommerce;

-- 사용자 테이블 생성
CREATE TABLE customers (
    customer_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    phone VARCHAR(15),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 제품 테이블 생성
CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    stock INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 주문 테이블 생성
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT NOT NULL,
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    total_amount DECIMAL(10, 2),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

-- 주문 상세 테이블 생성
CREATE TABLE order_details (
    order_detail_id INT AUTO_INCREMENT PRIMARY KEY,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);
 

실제로 CREATE를 실행하는 방법

  1. MySQL Workbench 사용: GUI 환경에서 SQL 명령어를 실행할 수 있습니다.
  2. Command Line Interface(CLI): MySQL CLI에서 SQL 명령어를 직접 실행할 수 있습니다.
  3. PHPMyAdmin: 웹 기반의 MySQL 관리 도구를 활용해 쉽게 실행 가능합니다.

참고

MySQL 공식 문서: https://dev.mysql.com/doc/refman/8.0/en/

반응형