👉
SQL
은관계형 데이터베이스 관리 시스템(RDBMS)
의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.
👉 관계형 데이터베이스 관리 시스템에서 자료의검색
과관리
, 데이터베이스스키마 생성과 수정
, 데이터베이스객체 접근 조정 관리
를 위해 고안되었다.
👉 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다.
SQL
→Syntax Check
→Semantic Check
→Library Cache Check
→Optimization
→Raw Source Generation
→Execution
⑤ SELECT
① FROM
② WHERE
③ GROUP BY
④ HAVING
⑥ ORDER BY
데이터베이스 언어 SQL 문법의 종류는 다음 3가지로 구별된다.
👉 데이터 정의 언어(DDL: Data Definition Language)
👉 데이터 조작 언어(DML:Data Manipulation Language)
👉 데이터 제어 언어(DCL:Date Control Language)
👉 트랜잭션 제어 언어(TCL: Transaction Control Language)
테이블과 컬럼을 정의하는 명령어로 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할을 담당한다.
DDL은 명령어를 입력하는 순간 작업이
즉시 반영(Auto Commit)
되기 때문에 사용할 때 주의해야 한다.
명령어 | 내용 |
---|---|
CREATE | 테이블을 생성하는 역할 |
ALTER | 테이블의 구조를 수정하는 역할 |
DROP | 테이블을 삭제하는 역할 |
RENAME | 테이블을 이름을 변경하는 역할 |
TRUNCATE | 테이블을 초기화하는 역할 |
👉 CREATE 규칙
,
으로 구분하며 테이블 생성문의 마지막은 ;
이다.👉 ALTER: 컬럼 변경 문법
명령어 | 내용 |
---|---|
ADD COLUMN | 컬럼을 추가하는 역할 |
DROP COLUMN | 컬럼을 삭제하는 역할 |
MODIFY COLUMN | 컬럼을 수정하는 역할 |
RENAME COLUMN | 컬럼 이름을 변경하는 역할 |
DROP CONSTRAIN | 컬럼을 제약조건을 기반해서 삭제하는 역할 |
데이터베이스의 내부 데이터를 관리하기 위한 언어이다. 데이터를 조회, 추가, 변경, 삭제 등의 작업을 수행하기 위해 사용된다.
DDL과 달리 DML은 적는
즉시 반영(Auto Commit)
이 되기 않는다. 다시 말해, DML에 의한 데이터 변동은 영구적인 변경이 아니기 때문에ROLLBACK
으로 다시 되돌릴 수 있다.
또한, DML은Target 테이블
을메모리 버퍼
위에 올려두고 변경을 수행하기 때문에, 실시간으로 테이블에 반영되지 않는다.Commit
명령어를 통해Transaction
을 종료해야 해당 변경 사항이 테이블에 반영된다.
명령어 | 내용 |
---|---|
SELECT | 데이터베이스에서 데이터를 검색하는 역할 |
INSERT | 테이블에 데이터를 추가하는 역할 |
UPDATE | 테이블 내에 존재하는 데이터를 수정하는 역할 |
DELETE | 테이블에서 데이터를 삭제하는 역할 |
데이터를 관리 목적으로 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용한다. DCL을 사용하면 데이터베이스에 접근하여 읽거나 쓰는 것을 제한할 수 있는 권한을 부여하거나 박탈할 수 있고 트랜잭션을 명시하거나 조작할 수 있다.
불법적인 사용자로부터 데이터를 보호하기 위한 데이터 보안의 역할을 수행하며, 데이터의 정확성을 위한 무결성을 유지하기도 한다. 마지막으로 시스템 장애에 대비한 회복과 병행수행을 제어한다.
명령어 | 내용 |
---|---|
GRANT | 권한을 정의할때 사용하는 명령어 |
REVOKE | 권한을 삭제할때 사용하는 명령어 |
DCL과 비슷한 맥락이지만 데이터를 제어하는 언어가 아닌
트랜잭션
을 제어할때 사용한다. 논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를트랜잭션
별로 제어한다.
데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말한다. 보통 DBMS 선능을 초당 트랜잭션이 몇개가 실행되었는지로 측정한다.
MySQL의 입력하는 모든 명령어들은 각각 하나의 트랜잭션이라고 할 수 있다.
👉트랜잭션 단위 예시 가져옴
게시판을 예로 들어보자
1) 게시판 사용자는 게시글을 작성하고, 올리기 버튼을 누른다.
2) 그러면 글 올리기가 처리되고 자동으로 다시 게시판에 돌아오게 된다.
3) 게시판에서 자신의 글이 포함된 업데이트된 게시글들을 볼 수 있다.
여기서 작업의 단위는 insert문과 select문 둘다 를 합친것이다.
이러한 작업단위를 하나의 트랜잭션이라 한다.
관리자나 개발자가 하나의 트랜잭션 설계를 잘하는 것이 데이터를 다루는 것에 많은 이점이 있다.
👉 원자성(Atomicity)
원자성은 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것이다. 트랜잭션은 사람이 설계한 논리적인 작업 단위로서, 일처리는 트랜잭션의 작업이 부분적으로 실행되다가 중단되 않고 작업단위 별로 이루어져야 사람이 다루는데 무리가 없다.
사
👉 일관성(Consistency)
일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것이다. 즉, 데이터 타입이 반환 후와 전이 항상 동일해야 한다. 예시) 갑자기 데이터 타입이 정수형에서 문자열로 변화하면 안됨
👉 독립성(Isolation)
독립성은 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 마찬가지로 독립적임을 의미한다. 각각의 트랜잭션은 서로 간섭이 불가하기 때문에 하나의 특정 트랜잭션이 완료될때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
👉 지속성(Dutability)
지속성은 트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다는 점이다. 보통 Commit이 완료되면 지속성은 자연스럽게 충족되는 특징이다.
👉 Active
: 트랜잭션이 현재 실행 중인 상태
👉 Failed
: 트랜잭션이 실행되다 오류가 발생해서 중단된 상태
👉 Aborted
: 트랜잭션이 비정상 종료되어 Rollback이 수행된 상태
👉 Partially Committed
: 트랜잭션의 연산이 마지막까지 실행되고 Commit이 되기 직전 상태
👉 Commited
: 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
👉 Commit
Commit은 모든 작업들을 정상 처리하겠다고 확정하는 명령어이다. 해당 처리 과정을 DB에 영구 저장하겠다는 의미로 Commit을 수행하면 하나의 트랜잭션 과정이 종료된다. Commit을 하기 전에는 다른 사용자가 트랜잭션 내용을 확인할 수 없다. 또한, 변경된 행은 잠금이 설정되어 있어서 다른 사용자가 변경할 수 없다.
👉 Rollback
Roll-back은 작업 중 문제가 발생되어 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어이다. 해당 명령을 트랜잭션에게 하달하면 트랜잭션은 Commit 되기 이전의 데이터오 돌아가 변경에 대하여 취소한다. 관련된 행에 대한 잠금이 풀리고 데이터 변경 사항이 복구되는 것이다.
명령어 | 내용 |
---|---|
COMMIT | 모든 작업을 정상적으로 처리하겠다는 명령어 |
ROLLBACK | 모든 작업을 다시 돌려 놓겠다는 명령어 |
SAVEPOINT | Commit 전에 특정 시점까지만 반영하거나 Rollback하겠다는 명령어 |
👉 DELETE FROM TABLE
시스템 부하가 크다. 데이터 전체를 삭제 하는것이 아니라 복구할 수 있게끔 삭세하기 때문에 메모리를 많이 차지한다. 하지만 반대로 정상적인 복구가 가능성이 높다.
👉 TRUNCATE TABLE
시스템 부하가 적다. DELETE와 다르게 데이터 전체를 날려버리기 때문에 메모리를 많이 차지 하지 않는다. 하지만 이때문에 정상적인 데이터 복구가 불가능하다.
2개의 키워드는 용도가 비슷하지만 아래와 같이 다른점 역시 존재한다.
👉 DISTINCT
DISTINCT 키워드를 사용하여 데이터 중복을 제거할 때는 DISTINCT 키워드만 명시하면 되므로 쿼리문이 간결하다. 하지만 TEMP TABLESPCE를 생성하여 임시로 저장하고 작업하는 방식이라 시스템 부하가 크다.
👉 GROUP BY
GROUP BY 절을 이용하면 간결하게 명시할 수 있으며 DISTINCT와 다르게 시스템 부하가 적다.
좋은글 감사합니다.
오타가 있네요 "보통 DBMS 선능을"