SQL
Structured Query Language 의 약어로 관계형 데이터베이스 관리 시스템에서 데이터를 관리하기 위한 표준 프로그래밍 언어를 뜻한다.
SQL 문은 표준 언어와 비 표준언어로 나뉘며 표준 언어는 모든 RDBMS 제품군들이 지원하고
비 표준 언어는 특정 RDBMS 에서만 지원되는 언어이다.
데이터를 관리하기 위한 명령문의 분류는 데이터 정의 언어(DDL), 데이터 조작 언어(DML), 데이터 제어 언어(DCL), 트랙잭션 제어 언어(TCL) 로 나눌 수 있다.
데이터 정의 언어 (Data Definition Language, DDL)
DDL은 데이터베이스 구조를 만들고 수정하고 삭제하는 명령어를 뜻한다.
테이블과 인덱스의 구조를 관리하는 언어
CREATE
새로운 데이터 베이스 구조를 만든다. 테이블, 뷰, 인덱스 등을 생성할 때 사용한다.
-- STUDENT라는 새 테이블을 만들고 ID 라는 정수형 필드, NAME 이라는 문자열 필드를 생성
CREATE TABLE STUDENT (
ID INT,
NAME VARCHAR(50)
);
ALTER
이미 존재하는 데이터베이스 구조를 변경한다. 테이블에 새로운 열을 추가하거나 기존 열을 수정할 때 사용
-- STUDENT 테이블에 EMAIL 이라는 새로운 문자열 필드를 추가
ALTER TABLE STUDENT
ADD COLUMN EMAIL VARCHAR(100);
DROP
기존의 데이터베이스 구조를 삭제한다. 한 번 삭제하면 복구가 불가능해 주의가 필요하다.
-- STUDENT 테이블을 데이터베이스에서 완전히 삭제
DROP TABLE STUDENT;
TRUNCATE
테이블의 데이터를 모두 삭제하지만, 테이블 구조는 남겨둔다. 대량의 데이터를 빠르게 삭제할 때 유용하다.
-- STUDENT 테이블의 모든 데이터를 삭제하지만, 테이블 구조는 보존
TRUNCATE TABLE STUDENT;
데이터 조작 언어 (Data Manipulation Language, DML)
DML은 데이터를 조회, 추가, 수정, 삭제하는데 사용하는 명령어이다.
테이블 등에 데이터를 저장, 수정, 삭제, 추출 등을 처리하는 언어
SELECT
데이터베이스에서 데이터를 조회할 때 사용하고 자주 사용되는 명령어이다.
INSERT
테이블에 새로운 데이터를 추가할 때 사용한다.
UPDATE
테이블의 기존 데이터를 수정한다.
DELETE
테이블에서 하나 이상의 데이터 행을 삭제 한다.
-- STUDENT 테이블의 모든 데이터를 조회
SELECT * FROM STUDENT;
-- STUDNET 테이블에 새로운 데이터를 추가한다.
INSERT INTO STUDENT (ID, NAME) VALUES (2, '잔망루피');
-- ID 가 2인 행의 NAME을 박루피로 수정한다.
UPDATE STUDENT SET NAME = '박루피' WHERE ID = 2;
-- ID가 1인 행을 STUDENT 데이블에서 삭제한다.
DELETE FROM STUDENT WHERE ID = 1;
데이터 제어 언어 (Data Control Language, DCL)
DCL은 데이터베이스에서 사용자 권한을 관리하는 데 사용되는 명령어
사용자 권한을 부여하거나 회수하는데 사용되는 SQL 구문
주로 데이터베이스 관리자가 사용하며, 보안 및 접근 제어와 관련된 작업에 필요
DCL을 사용할 때는 권한을 잘못 부여하거나 회수하면 데이터베이스 보안과 기능에 영향을 줄 수 있기 때문에 주의해야 한다.
GRANT
사용자에게 데이터베이스 객체(테이블, 뷰, 프로시저 등)에 대한 권한을 부여하는데 사용
권한에는 데이터를 조회할 수 있는 SELECT, 변경할 수 있는 INSERT, UPDATE, DELETE 등이 있음
-- 사용자에게 특정 테이블에 대한 조회 권한을 부여
GRANT SELECT ON table_name TO user_name;
-- 사용자에게 여러 권한을 동시에 부여
GRANT SELECT, INSERT ON table_name TO user_name;
-- 사용자에게 다른 사용자에게 권한을 부여할 수 있는 권한을 부여
GRANT SELECT ON table_name TO user_name WITH GRANT OPTION;
REVOKE
GRANT를 통해 부여된 권한을 다시 회수, 권한을 부여받은 사용자로부터 특정권한을 제거하고 싶을 때 사용
-- 사용자로부터 특정 테이블에 대한 조회 권한을 회수
REVOKE SELECT ON table_name FROM user_name;
-- 사용자로부터 여러 권한을 동시에 회수
REVOKE SELECT, INSERT ON table_name FROM user_name;
-- 사용자로부터 다른 사용자에게 권한을 부여할 수 있는 권한을 회수
REVOKE GRANT OPTION FOR SELECT ON table_name FROM user_name;
트랜잭션 제어 언어(Transaction Control Language, TCL)
SQL에서 데이터베이스 트랜잭션을 관리하는 데 사용되는 명령어들이다.
트랜잭션은 데이터베이스 내에서 실행되는 하나 이상의 연산을 하나의 단위로 묶는 것
이 트랜잭션은 전체가 성공적(커밋)으로 실행되거나 전혀 실행(롤백)되지 않아야 됨
이러한 전부 또는 전혀 없음의 특성을 원자성이라고 함
COMMIT
데이터베이스에 대한 모든 변경사항을 영구적으로 저장합니다. 트랜잭션을 성공적으로 종료하고, 트랜잭션 내의 모든 DML 명령(INSERT, UPDATE, DELETE) 결과를 데이터베이스에 반영합니다.
BEGIN TRANSACTION; -- 트랜잭션 시작
INSERT INTO table_name (column1, column2) VALUES (value1, value2); -- 데이터 삽입
UPDATE table_name SET column1 = value1 WHERE column2 = value2; -- 데이터 갱신
COMMIT; -- 변경사항을 데이터베이스에 영구적으로 반영
ROLLBACK
트랜잭션의 변경사항을 취소하고, 데이터베이스를 트랜잭션 시작 이전의 상태로 되돌립니다. 이는 오류가 발생했을 때나 사용자가 의도적으로 트랜잭션을 취소할 때 사용됩니다.
BEGIN TRANSACTION; -- 트랜잭션 시작
INSERT INTO table_name (column1, column2) VALUES (value1, value2); -- 데이터 삽입
-- 여기서 어떤 이유로 작업을 취소해야 한다면
ROLLBACK; -- 트랜잭션 시작 이후의 모든 변경사항을 취소
SAVEPOINT
트랜잭션 내에서 중간 지점을 설정합니다. SAVEPOINT 이후에 오류가 발생하면 전체 트랜잭션을 롤백하지 않고 SAVEPOINT까지만 롤백할 수 있습니다. 이를 통해 트랜잭션 내에서 부분적인 롤백을 수행할 수 있습니다.
SET TRANSACTION
트랜잭션의 속성을 설정합니다. 예를 들어, 트랜잭션이 READ ONLY 또는 READ WRITE, SERIALIZABLE 등의 격리 수준을 갖도록 설정할 수 있습니다.
'BACKEND > DATABASE' 카테고리의 다른 글
[Oracle SQL] DML - SELECT 기본, 조건절 사용 (0) | 2023.11.10 |
---|---|
[Oracle SQL] 데이터 딕셔너리 (1) | 2023.11.08 |
SQL 튜토리얼 - IN, BETWEEN, Aliases 이해하기 (0) | 2023.06.21 |
SQL 튜토리얼 - WILDCARD 이해하기 (0) | 2023.06.20 |
SQL 튜토리얼 - Min, Max, Count, Avg, Sum, Like 이해하기 (1) | 2023.06.19 |