본 시리즈에서는 데이터베이스의 개념을 정리하고 필요시 실습을 진행합니다.
Ubuntu-24.04
)10.11.8-MariaDB
)2024.2.2
)correto-21
)Ultimate Edition
)world database
SQL(Structured Query Language)는 관계형 데이터베이스(RDBMS)에서 데이터를 정의하고 조작하기 위한 언어입니다.
JOIN
연산을 통해 여러 테이블을 조합하여 원하는 데이터를 추출할 수 있습니다.SQL 명령어는 용도에 따라 크게 다음과 같은 네 가지로 분류됩니다.
CREATE
, ALTER
, DROP
과 같은 명령어가 포함됩니다.SELECT
, INSERT
, UPDATE
, DELETE
명령어가 포함됩니다.GRANT
, REVOKE
명령어가 포함됩니다.COMMIT
, ROLLBACK
, SAVEPOINT
명령어가 포함됩니다.SQL은 이러한 다양한 기능을 통해 데이터베이스의 구조를 정의하고 데이터를 조작하며, 데이터 무결성과 보안을 유지할 수 있는 강력한 도구입니다.
DDL(Data Definition Language)은 데이터베이스와 그 안의 객체(테이블, 인덱스 등)의 구조를 정의하고 관리하는 명령어들로 구성된 언어입니다.
CREATE
명령어는 새로운 데이터베이스, 테이블, 인덱스 등을 생성할 때 사용됩니다.
CREATE
명령어를 사용할 수 있습니다.-- 데이터베이스 생성
CREATE DATABASE my_database;
-- 테이블 생성
CREATE TABLE users (
user_id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 사용자 계정 생성 (서버)
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
ALTER
명령어는 기존의 테이블이나 데이터베이스 객체를 수정할 때 사용됩니다.
-- 테이블에 열 추가
ALTER TABLE users ADD COLUMN age INT;
-- 열의 데이터 타입 변경
ALTER TABLE users MODIFY COLUMN name VARCHAR(100);
-- 열 삭제
ALTER TABLE users DROP COLUMN age;
-- 열 이름 변경
ALTER TABLE users2 RENAME TO users1;
DROP
명령어는 데이터베이스, 테이블, 인덱스 등의 객체를 삭제할 때 사용됩니다.
-- 데이터베이스 삭제
DROP DATABASE my_database;
-- 테이블 삭제
DROP TABLE users;
-- 사용자 계정 삭제
DROP USER 'new_user'@'localhost';
TRUNCATE
명령어는 테이블의 모든 데이터를 일괄 삭제할 때 사용됩니다.
DELETE
명령어와 달리 로그를 기록하지 않아 빠르게 대량의 데이터를 삭제할 수 있습니다.-- 테이블의 모든 데이터 삭제 (테이블 구조는 유지)
TRUNCATE TABLE users;
RENAME
명령어는 테이블의 이름을 변경할 때 사용됩니다.
-- 테이블 이름 변경
RENAME TABLE old_table_name TO new_table_name;
-- 여러 테이블 이름 변경
RENAME TABLE old_table_name1 TO new_table_name1,
old_table_name2 TO new_table_name2;
명령어 | 설명 |
---|---|
CREATE | 새로운 데이터베이스나 테이블, 인덱스, 사용자 계정을 생성 |
ALTER | 기존의 테이블이나 데이터베이스 객체를 수정 |
DROP | 데이터베이스, 테이블, 인덱스, 사용자 계정을 삭제 |
TRUNCATE | 테이블의 모든 데이터를 일괄 삭제 |
RENAME | 테이블의 이름을 변경 |
DDL 명령어는 데이터베이스 구조와 객체를 정의하고 수정할 때 중요한 역할을 하며, 데이터베이스 설계의 기본이 되는 명령어들로 구성되어 있습니다.
제약조건(Constraints)은 데이터베이스에서 테이블에 저장되는 데이터의 무결성과 일관성을 유지하기 위해 적용하는 규칙입니다.
PRIMARY KEY
는 테이블 내에서 각 행을 고유하게 식별할 수 있는 열(Column)이나 열의 조합입니다.
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
AUTO_INCREMENT
는 숫자 데이터 타입의 열에 적용하여 자동으로 고유한 값을 생성하는 데 사용됩니다.
PRIMARY KEY
와 함께 사용하여 각 행의 고유 ID를 자동으로 증가시키며, 값이 자동으로 지정되므로 수동으로 입력할 필요가 없습니다.AUTO_INCREMENT
는 정수 데이터 타입 열에서만 사용할 수 있습니다.CREATE TABLE products (
product_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
price DECIMAL(10, 2)
);
NOT NULL
제약조건은 열에 NULL 값이 저장되는 것을 허용하지 않도록 설정합니다.
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE NOT NULL,
customer_id INT NOT NULL
);
UNIQUE
제약조건은 특정 열이 고유한 값만 가질 수 있도록 설정합니다.
PRIMARY KEY
와 달리 테이블에 여러 개의 UNIQUE
제약조건을 설정할 수 있습니다.CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(50) UNIQUE,
email VARCHAR(100) UNIQUE
);
FOREIGN KEY
는 다른 테이블의 PRIMARY KEY
나 UNIQUE
열을 참조하여 테이블 간의 관계를 정의합니다.
FOREIGN KEY
제약조건을 사용하여 데이터베이스 내에서 데이터 무결성을 유지하고, 참조 무결성 제약을 통해 삭제와 업데이트의 제약을 설정할 수 있습니다.CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
CHECK
제약조건은 열에 입력되는 데이터가 특정 조건을 만족해야만 저장되도록 설정합니다.
CHECK
제약조건을 사용하여 값의 범위나 조건을 설정하여 유효성을 검사할 수 있습니다.MySQL
은 CHECK
제약조건을 제한적으로 지원하므로 MariaDB
와 호환되는 환경에서 사용할 때 주의가 필요합니다.CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
CHECK (age >= 18)
);
제약조건 | 설명 |
---|---|
PRIMARY KEY | 각 행을 고유하게 식별하는 열, NULL과 중복 값 허용 안 됨 |
AUTO_INCREMENT | 숫자 타입 열에서 자동으로 고유 값을 생성, 주로 PRIMARY KEY와 함께 사용 |
NOT NULL | 열에 NULL 값을 허용하지 않음, 필수 입력 필드 설정 |
UNIQUE | 열에 고유한 값만 허용, 중복 값 허용 안 됨 |
FOREIGN KEY | 다른 테이블의 PRIMARY KEY를 참조하여 테이블 간 관계 설정 |
CHECK | 열에 입력되는 데이터가 특정 조건을 만족해야 함 |
제약조건(Constraints)은 데이터베이스의 데이터 무결성과 정확성을 유지하는 중요한 요소입니다. 이러한 제약조건을 적절히 설정함으로써 데이터베이스의 일관성을 보장하고, 데이터의 유효성을 검증할 수 있습니다.
DCL(Data Control Language)과 TCL(Transaction Control Language)은 데이터베이스의 접근 권한과 트랜잭션을 제어하는 데 사용되는 SQL 명령어들입니다.
DCL은 데이터베이스 사용자에 대한 권한을 제어하는 언어로, 특정 사용자에게 데이터베이스 접근 권한을 부여하거나 회수할 수 있습니다.
특정 사용자에게 데이터베이스, 테이블, 열 등에 대한 접근 권한을 부여합니다.
SELECT
, INSERT
, UPDATE
, DELETE
와 같은 기본적인 데이터 조작 권한뿐만 아니라 CREATE
, DROP
과 같은 데이터 정의 권한도 포함됩니다.-- 사용자에게 테이블에 대한 SELECT 권한 부여
GRANT SELECT ON my_database.my_table TO 'user_name'@'localhost';
-- 사용자에게 모든 권한 부여
GRANT ALL PRIVILEGES ON my_database.* TO 'user_name'@'localhost';
특정 사용자에게 부여된 권한을 회수합니다.
-- 사용자에게서 SELECT 권한 회수
REVOKE SELECT ON my_database.my_table FROM 'user_name'@'localhost';
-- 사용자에게서 모든 권한 회수
REVOKE ALL PRIVILEGES ON my_database.* FROM 'user_name'@'localhost';
참고: 권한 부여와 회수는 데이터베이스 보안을 강화하는 중요한 방법으로, 특히 다수의 사용자가 접근하는 환경에서 필수적입니다.
TCL은 데이터베이스에서 트랜잭션(Transaction)을 제어하는 언어로, 데이터의 일관성을 유지하고 여러 작업을 하나의 논리적 단위로 묶어 관리할 수 있게 합니다.
BEGIN;
INSERT INTO accounts (user_id, balance) VALUES (1, 1000);
COMMIT;
COMMIT
되지 않은 상태에서 ROLLBACK
을 수행하면, 모든 작업이 취소됩니다.BEGIN;
UPDATE accounts SET balance = balance - 500 WHERE user_id = 1;
-- 오류가 발생했을 경우
ROLLBACK;
ROLLBACK
할 수 있게 합니다.SAVEPOINT
를 사용하여 트랜잭션 내에서 여러 지점을 저장하고, 필요에 따라 특정 SAVEPOINT
로 돌아가 수정할 수 있습니다.BEGIN;
INSERT INTO orders (order_id, amount) VALUES (1, 100);
SAVEPOINT savepoint1;
INSERT INTO orders (order_id, amount) VALUES (2, 200);
-- 특정 지점으로 되돌아감
ROLLBACK TO savepoint1;
COMMIT;
참고: 트랜잭션 관리는 데이터베이스의 일관성과 무결성을 보장하는 중요한 기능입니다. 특히 여러 명령어를 하나의 논리적 작업으로 묶어서 처리할 때 유용합니다.
명령어 | 설명 |
---|---|
GRANT | 사용자에게 데이터베이스 접근 권한을 부여 |
REVOKE | 사용자에게 부여된 접근 권한을 회수 |
COMMIT | 트랜잭션을 성공적으로 완료하고 변경 사항을 영구적으로 저장 |
ROLLBACK | 트랜잭션 중 오류가 발생하거나 취소할 때, 모든 변경 사항을 원래 상태로 되돌림 |
SAVEPOINT | 트랜잭션 내에서 특정 지점을 저장하여 부분적으로 ROLLBACK 가능 |
DCL은 데이터베이스의 보안과 접근 제어를 담당하며, TCL은 데이터베이스의 일관성과 무결성을 유지하기 위한 트랜잭션 제어를 담당합니다. 이 두 언어는 데이터베이스의 안정성과 보안을 보장하는 데 필수적입니다.
이번 포스팅에서는 SQL의 개요와 주요 명령어 분류, DDL(Data Definition Language), 제약조건(Constraints), DCL(Data Control Language) 및 TCL(Transaction Control Language)에 대해 다루어 보았습니다.
명령어 | 설명 |
---|---|
CREATE | 새로운 데이터베이스나 테이블, 인덱스, 사용자 계정을 생성 |
ALTER | 기존의 테이블이나 데이터베이스 객체를 수정 |
DROP | 데이터베이스, 테이블, 인덱스, 사용자 계정을 삭제 |
TRUNCATE | 테이블의 모든 데이터를 일괄 삭제 |
RENAME | 테이블의 이름을 변경 |
제약조건 | 설명 |
---|---|
PRIMARY KEY | 각 행을 고유하게 식별하는 열, NULL과 중복 값 허용 안 됨 |
AUTO_INCREMENT | 숫자 타입 열에서 자동으로 고유 값을 생성, 주로 PRIMARY KEY와 함께 사용 |
NOT NULL | 열에 NULL 값을 허용하지 않음, 필수 입력 필드 설정 |
UNIQUE | 열에 고유한 값만 허용, 중복 값 허용 안 됨 |
FOREIGN KEY | 다른 테이블의 PRIMARY KEY를 참조하여 테이블 간 관계 설정 |
CHECK | 열에 입력되는 데이터가 특정 조건을 만족해야 함 |
명령어 | 설명 |
---|---|
GRANT | 사용자에게 데이터베이스 접근 권한을 부여 |
REVOKE | 사용자에게 부여된 접근 권한을 회수 |
COMMIT | 트랜잭션을 성공적으로 완료하고 변경 사항을 영구적으로 저장 |
ROLLBACK | 트랜잭션 중 오류가 발생하거나 취소할 때, 모든 변경 사항을 원래 상태로 되돌림 |
SAVEPOINT | 트랜잭션 내에서 특정 지점을 저장하여 부분적으로 ROLLBACK 가능 |
다음 포스팅에서는 이러한 RDBMS에서 데이터를 조회, 삽입, 수정, 삭제하는 DML(Data Manipulation Language) 명령어를 다룰 예정입니다.