필수 DDL 및 DML 명령어: 생성, 조회, 수정, 삭제

이 실용적인 DDL 및 DML 명령어 가이드를 통해 필수 MySQL 데이터베이스 작업을 마스터하세요. `CREATE TABLE`을 사용하여 테이블 구조를 정의하고 `INSERT`, `SELECT`, `UPDATE`, `DELETE`로 데이터를 조작하는 방법을 배웁니다. 이 문서는 명확한 구문, 실제 예제, 그리고 MySQL에서 효과적인 데이터 관리를 위한 중요한 팁을 제공합니다.

42 조회수

필수 DDL 및 DML 명령어: Create, Select, Update, Delete

데이터베이스, 특히 MySQL과 같은 관계형 데이터베이스를 다룰 때는 기본적으로 데이터 구조를 정의한 다음 해당 데이터와 상호 작용하는 과정이 포함됩니다. 이 과정은 일반적으로 두 가지 주요 SQL 명령어 범주, 즉 데이터 정의 언어(DDL, Data Definition Language)와 데이터 조작 언어(DML, Data Manipulation Language)로 나뉩니다. DDL 명령어는 테이블과 같은 데이터베이스 객체를 정의하고 관리하는 데 사용되는 반면, DML 명령어는 해당 테이블 내의 레코드를 삽입, 검색, 수정 및 삭제하는 데 사용됩니다.

본 가이드는 가장 필수적인 MySQL DDL 및 DML 명령어, 즉 데이터 구조를 정의하는 CREATE TABLE, 데이터를 조작하는 INSERT, SELECT, UPDATE, DELETE에 대해 안내할 것입니다. 이 명령어들을 숙달하는 것은 MySQL 데이터베이스를 효과적으로 관리하고 활용하고자 하는 모든 사람에게 중요한 단계입니다.

데이터 정의 언어(DDL): 테이블 생성

DDL 명령어는 데이터베이스 객체의 스키마 및 구조와 관련됩니다. 데이터 저장소에 가장 기본적인 DDL 명령어는 CREATE TABLE이며, 이를 통해 데이터의 청사진을 정의할 수 있습니다.

CREATE TABLE 구문(Syntax)

테이블을 생성하기 위한 기본 구문은 테이블 이름을 지정한 다음, 데이터 유형 및 제약 조건을 포함하여 해당 열(컬럼)을 정의하는 것입니다.

CREATE TABLE table_name (
    column1 datatype constraints,
    column2 datatype constraints,
    column3 datatype constraints,
    ...
);
  • table_name: 테이블에 부여하려는 이름입니다. 데이터베이스 내에서 고유해야 합니다.
  • column_name: 테이블 내의 각 개별 필드 이름입니다.
  • datatype: 열이 보유할 데이터 유형을 지정합니다 (예: 정수의 경우 INT, 가변 길이 문자열의 경우 VARCHAR(255), 날짜의 경우 DATE, 정밀한 십진수의 경우 DECIMAL(10, 2)).
  • constraints: 데이터 무결성을 보장하기 위해 열에 적용되는 규칙입니다. 일반적인 제약 조건은 다음과 같습니다.
    • NOT NULL: 열에 NULL 값이 포함될 수 없도록 보장합니다.
    • UNIQUE: 열의 모든 값이 고유하도록 보장합니다.
    • PRIMARY KEY: NOT NULLUNIQUE의 조합입니다. 각 테이블에는 각 행을 고유하게 식별하는 기본 키(Primary Key)가 있어야 합니다.
    • FOREIGN KEY: 한 테이블의 열을 다른 테이블의 기본 키에 연결하여 참조 무결성을 강제합니다.
    • DEFAULT value: 삽입 시 값이 지정되지 않은 경우 열의 기본값을 설정합니다.

CREATE TABLE 예시

재고 품목에 대한 정보를 저장할 간단한 products 테이블을 생성해 보겠습니다.

CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL UNIQUE,
    category VARCHAR(50),
    price DECIMAL(10, 2) NOT NULL,
    stock_quantity INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

이 예시에서:
* product_id는 자동으로 증가하고 기본 키 역할을 하는 정수입니다.
* product_name은 고유해야 하는 필수 문자열입니다.
* price는 필수 십진수입니다.
* stock_quantity는 지정되지 않은 경우 기본값이 0입니다.
* created_at는 행이 생성된 타임스탬프를 기록합니다.

데이터 조작 언어(DML): 데이터 작업

DML 명령어는 데이터베이스 테이블 내의 레코드(행)를 관리하는 데 사용됩니다. 이는 일상적인 데이터베이스 작업에서 가장 자주 사용되는 명령어입니다.

INSERT 명령어: 새 데이터 추가

INSERT 명령어는 테이블에 새 데이터 행을 추가하는 데 사용됩니다.

INSERT 구문

INSERT를 사용하는 방법에는 몇 가지가 있습니다.

  1. 모든 열에 대한 값 지정:
    sql INSERT INTO table_name VALUES (value1, value2, value3, ...);
    값의 순서는 테이블 정의의 열 순서와 일치해야 합니다.

  2. 특정 열에 대한 값 지정:
    sql INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
    테이블 구조가 변경될 경우 가독성이 높고 오류 발생 가능성이 적기 때문에 이 방법이 일반적으로 선호됩니다.

INSERT 예시

products 테이블을 사용한 예시:

-- 모든 열에 대한 값 삽입 (product_id는 AUTO_INCREMENT 가정)
INSERT INTO products (product_name, category, price, stock_quantity)
VALUES ('Laptop Pro', 'Electronics', 1200.50, 50);

-- 특정 열에 대한 값 삽입
INSERT INTO products (product_name, price)
VALUES ('Mechanical Keyboard', 75.99);

-- 한 번에 여러 행 삽입
INSERT INTO products (product_name, category, price, stock_quantity)
VALUES 
('Ergonomic Mouse', 'Electronics', 25.00, 120),
('Desk Lamp', 'Home Goods', 45.00, 75);

SELECT 명령어: 데이터 검색

SELECT 명령어는 데이터 검색의 초석입니다. 다양한 기준에 따라 데이터베이스를 쿼리하고 특정 데이터를 가져올 수 있습니다.

SELECT 구문
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name [ASC|DESC]
LIMIT number;
  • column1, column2, ...: 검색하려는 열입니다. 모든 열을 선택하려면 *를 사용합니다.
  • FROM table_name: 쿼리하는 테이블입니다.
  • WHERE condition: (선택 사항) 지정된 조건에 따라 행을 필터링합니다. 조건에는 비교 연산자(=, !=, >, <, >=, <=), 논리 연산자(AND, OR, NOT), 패턴 일치(LIKE)가 포함될 수 있습니다.
  • ORDER BY column_name [ASC|DESC]: (선택 사항) 하나 이상의 열을 기준으로 결과 집합을 정렬합니다. ASC는 오름차순(기본값), DESC는 내림차순입니다.
  • LIMIT number: (선택 사항) 반환되는 행의 수를 제한합니다.
SELECT 예시
-- 모든 제품의 모든 열 선택
SELECT *
FROM products;

-- 제품의 이름과 가격만 선택
SELECT product_name, price
FROM products;

-- 'Electronics' 카테고리의 제품 선택
SELECT *
FROM products
WHERE category = 'Electronics';

-- 가격이 100보다 큰 제품을 가격 내림차순으로 정렬하여 선택
SELECT product_name, price
FROM products
WHERE price > 100
ORDER BY price DESC;

-- 가격이 가장 비싼 상위 5개 제품 선택
SELECT product_name, price
FROM products
ORDER BY price DESC
LIMIT 5;

-- 이름이 'L'로 시작하는 제품 선택
SELECT *
FROM products
WHERE product_name LIKE 'L%';

UPDATE 명령어: 기존 데이터 수정

UPDATE 명령어를 사용하면 테이블의 기존 레코드를 변경할 수 있습니다.

UPDATE 구문
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • table_name: 업데이트할 레코드가 포함된 테이블입니다.
  • SET column1 = value1, ...: 업데이트할 열과 새 값을 지정합니다.
  • WHERE condition: 중요합니다! 이 절은 업데이트할 행을 결정합니다. 생략하면 테이블의 모든 행이 업데이트됩니다.
UPDATE 예시
-- 'Laptop Pro'의 가격을 50만큼 인상
UPDATE products
SET price = price + 50.00
WHERE product_name = 'Laptop Pro';

-- 'Mechanical Keyboard'의 카테고리와 재고 업데이트
UPDATE products
SET category = 'Accessories', stock_quantity = 100
WHERE product_name = 'Mechanical Keyboard';

-- **경고**: 이 명령은 모든 제품의 가격을 10.00으로 업데이트합니다.
-- UPDATE products
-- SET price = 10.00;

팁: 의도한 레코드만 수정하도록 보장하려면 업데이트 시 항상 WHERE 절을 사용하십시오. 먼저 SELECT 문으로 WHERE 절을 테스트하여 올바른 행을 대상으로 하는지 확인하십시오.

DELETE 명령어: 데이터 제거

DELETE 명령어는 테이블에서 행을 제거하는 데 사용됩니다.

DELETE 구문
DELETE FROM table_name
WHERE condition;
  • table_name: 행을 제거할 테이블입니다.
  • WHERE condition: 중요합니다! 이 절은 삭제할 행을 지정합니다. 생략하면 테이블의 모든 행이 삭제됩니다.
DELETE 예시
-- 이름이 'Desk Lamp'인 제품 삭제
DELETE FROM products
WHERE product_name = 'Desk Lamp';

-- 재고가 소진된 모든 제품 삭제 (stock_quantity가 0인 경우)
DELETE FROM products
WHERE stock_quantity = 0;

-- **경고**: 이 명령은 'products' 테이블의 모든 레코드를 삭제합니다!
-- DELETE FROM products;

경고: UPDATE와 마찬가지로, DELETE 문에서 WHERE 절을 생략하는 것은 테이블의 모든 데이터를 제거하는 파괴적인 작업입니다. 극도의 주의를 기울여 사용하십시오.

요약

DDL 및 DML 명령어를 이해하고 효과적으로 사용하는 것은 데이터베이스 관리의 기본입니다. CREATE TABLE을 사용하면 데이터 구조를 정의할 수 있으며, INSERT, SELECT, UPDATE, DELETE를 사용하면 데이터를 채우고, 쿼리하고, 수정하고, 관리할 수 있습니다.

이러한 명령어, 특히 UPDATEDELETE에 대해 명확한 WHERE 절을 사용하여 연습함으로써, MySQL 데이터베이스 작업을 위한 견고한 기반을 구축하고 데이터의 무결성과 정확성을 보장할 수 있습니다. 잠재적으로 파괴적인 작업을 수행하기 전에 항상 데이터를 백업하는 것을 잊지 마십시오.