데이터베이스 관리 시스템(DBMS)에서 데이터를 관리하기 위해 사용되는 표준화된 프로그래밍 언어
SQL은 관계형 데이터베이스에서 데이터를 조회, 삽입, 수정, 삭제하는 등의 작업을 수행하는 데 사용됩니다.
SQL은 ANSI(미국 국가 표준 협회)와 ISO(국제 표준화 기구)에서 표준으로 인정되어 있으며, 대부분의 관계형 데이터베이스 관리 시스템(RDBMS)에서 지원됩니다. SQL은 다음과 같은 기능을 제공합니다:
데이터 검색(SELECT): 특정 조건을 만족하는 데이터를 데이터베이스에서 검색하는 데 사용됩니다.
데이터 삽입(INSERT): 데이터베이스에 새로운 레코드를 추가하는 데 사용됩니다.
데이터 수정(UPDATE): 데이터베이스의 기존 레코드를 수정하는 데 사용됩니다.
데이터 삭제(DELETE): 데이터베이스에서 특정 레코드를 삭제하는 데 사용됩니다.
테이블 생성(CREATE TABLE): 새로운 테이블을 생성하는 데 사용됩니다.
테이블 삭제(DROP TABLE): 기존 테이블을 삭제하는 데 사용됩니다.
인덱스 생성(CREATE INDEX): 인덱스를 생성하여 데이터베이스의 성능을 향상시키는 데 사용됩니다.
데이터베이스 및 테이블 구조 변경(ALTER): 데이터베이스 및 테이블의 구조를 변경하는 데 사용됩니다.
데이터베이스의 구조를 정의하고 관리하기 위한 SQL 명령어의 일부분을 가리킵니다. DDL은 데이터베이스 객체를 생성, 수정, 삭제하는 데 사용됩니다.
★★COMMIT을 찍지 않아도 자동으로 반영된다
CREATE: 데이터베이스 객체(테이블, 뷰, 인덱스, 프로시저 등)를 생성합니다.
ALTER: 이미 존재하는 데이터베이스 객체의 구조를 수정합니다.
DROP: 데이터베이스 객체를 삭제합니다.
TRUNCATE: 테이블의 모든 레코드를 삭제합니다. (테이블의 구조는 그대로 유지됩니다.)
COMMENT: 데이터베이스 객체에 대한 주석(설명)을 추가합니다.
RENAME: 데이터베이스 객체의 이름을 변경합니다.
GRANT: 데이터베이스 객체에 대한 권한을 부여합니다.
REVOKE: 데이터베이스 객체에 대한 권한을 회수합니다.
(Data Manipulation Language)
은 관계형 데이터베이스에서 데이터를 쿼리하고 조작하는 데 사용되는 SQL 명령어의 일부분을 가리킵니다. DML은 데이터베이스에 저장된 데이터를 조회, 삽입, 수정, 삭제하는 데 사용됩니다. 주요한 DML 명령어에는 다음과 같은 것들이 있습니다:
INSERT: 데이터를 데이터베이스 테이블에 삽입합니다. 새로운 행을 추가하거나, 이미 존재하는 행을 복사하는 데 사용됩니다.
UPDATE: 데이터베이스 테이블의 기존 데이터를 수정합니다. 특정 조건을 만족하는 행의 값을 변경하는 데 사용됩니다.
DELETE: 데이터베이스 테이블에서 특정 조건을 만족하는 행을 삭제합니다.
SELECT: 데이터베이스에서 데이터를 조회합니다. 이는 데이터베이스에서 특정 열의 값을 검색하거나, 연산을 수행하거나, 다른 테이블과의 조인을 통해 데이터를 가져올 때 사용됩니다.
데이터베이스 트랜잭션을 관리하는 데 사용되는 SQL 명령어의 일부분을 가리킵니다
COMMIT: 작업내용 저장
실제 DB에 반영됨. DML이 반영되게 할려면 반드시 COMMIT을 찍어줘야 한다.
현재 트랜잭션의 모든 변경 사항을 영구적으로 저장하고, 데이터베이스에 적용합니다. 즉, 트랜잭션을 성공적으로 완료하고, 변경 내용을 영구적으로 반영합니다.
ROLLBACK: ★(최근)마지막 COMMIT으로 돌아가는것
현재 트랜잭션의 모든 변경 사항을 취소하고, 트랜잭션을 이전의 상태로 되돌립니다. 즉, 트랜잭션을 실패로 표시하고, 변경 내용을 롤백하여 이전 상태로 복원합니다.
SAVEPOINT: 트랜잭션 내에서 특정 지점에 저장점을 설정합니다. 이는 나중에 ROLLBACK 명령을 사용하여 해당 저장점으로 되돌아가는 데 사용됩니다.
> 트랜잭션(Transaction)
데이터베이스에서 수행되는 작업의 논리적인 단위
예를 들어, 은행에서 계좌 이체는 트랜잭션으로 간주됩니다. 이체 작업은 보내는 계좌에서 금액을 감소하고, 받는 계좌에 금액을 증가시키는 두 가지 조작으로 이루어집니다. 이 두 가지 조작은 모두 원자성을 가져야 하며, 실패 시 롤백되어야 합니다. 이러한 트랜잭션은 데이터의 일관성과 무결성을 유지하는 데 중요한 역할을 합니다.
송금을 한다는건 단순히 송금이 아니라
나의 계좌에서 - 상대방계좌 + 가 되야 한다.
그래서 나의 계좌에서 - 될때 COMMIT,
상대방 계좌에서 +될때 COMMIT 이 되면 안된다
이체작업은 COMMIT 성공 상대방 계좌에서 금액을 증가시키는 작업에서 COMMIT 실패가 될 수 있다.
그래서 송금이라는 트랜잭션이 끝났을때 COMMIT이 되어야 한다
**원자성(Atomicity)
트랜잭션의 모든 작업은 원자적으로 수행되어야 합니다.
즉, 트랜잭션 내의 모든 조작이 성공하거나 실패해야 합니다. 하나의 작업이라도 실패하면 트랜잭션 전체가 실패로 표시되고, 모든 변경 사항이 롤백됩니다.