INDEX
SQL (Structured Query Language)
SQL은 우리말로 구조적 질의 언어라고 칭할 수 있다.
대화를 할 때 우리나라 사람끼리 한국어로 소통하지만,
외국인이면 그 사람과 소통할 수 있는 언어로 대화를 해야한다.
RDBMS 와 데이터에 관해 소통하려면 SQL 언어라는것을 알아야한다.
SQL로 무엇을하는가?
데이터를 관리-> 데이터를 관리하려면 기록할 공간이 필요하다.
기록할 공간 생성-> 테이블 이라는 하나의 저장공간인 객체를 생성 후 데이터를 기록한다.
데이터 조회-> 기록한 데이터를 찾기 위해 테이블을 조회한다.
새로운 데이터 삽입/입력 -> 새로운 데이터를 테이블에 기록한다.
입력한 데이터 수정-> 입력된 데이터 수정
입력한 데이터 삭제-> 입력된 데이터 삭제
데이터 관리란 데이터를 생성하는 작업과
데이터를 입력(삽입), 조회, 수정, 삭제 하는 작업으로 구분된다.
해당 작업을 (Create, Read, Update, Delete) 앞 글자를 따서 CRUD라 부른다.
SQL의 특징
C, Java, Python 과 같은 언어는 소프트웨어를 만들 때 사용하는 언어로
프로그래밍 언어 라고 부른다.
MySQL도 C 언어로 만들어졌다.
하지만 SQL은 소프트웨어를 만들지는 않고 데이터를 처리할 목적으로 RDBMS에서만 쓸 수 있게
특화된 언어이다. 따라서 다른 프로그래밍 언어와 SQL을 비교해 보면 특징을 명확하게 알 수 있다.
SQL은 다른 프로그래밍 언어를 배우거나 사용해보았을 때보다 비교적 배우고 사용하기 쉽다.
다른 프로그래밍언어보다 기본 구문이 간단하고 직관적이다. 또한 문법도 간단한 편이다.
집합적 언어란 어떤 조건에 맞는 데이터를 한번에 모두 처리하는 언어라고 보면 된다.
SQL은 표준이 있어서 한번 배우면 다른 RDBMS에서도 그대로 사용할 수 있다.
SQL 표준
SQL 표준이 있기에 MySQL에서 사용하는 SQL을 배워두면
Oracle, SQL Server, PostgreSQL 등 다른 RDBMS에서도 동일하게 사용할 수 있다.
마치 운전을 할 줄 알면 다른 어떤 자동차든 운전할 수 있는것과 동일한 맥락이다.
하지만 표준이 있음에도 RDBMS 제품마다 사용하는 SQL 구문이 모두 같은 것은 아니다.
큰 틀은 같지만, 제품별로 세부적인 SQL 문법이 많이 다른것이 현실이다.
이렇게 된 가장 큰 이유는 RDBMS 제품보다(1970) SQL 표준이 늦게(1986) 제정됐기 때문이다.
다행인 점은 각 RDBMS 제조사가 버전을 올리며 SQL 표준에 맞추려고 노력해왔다.
그래서 요즘에는 표준 SQL 구문이 대부분 통용된다. 다만 제품별로 지원하는 기능에는 차이가 좀 있다.
그래도 MySQL과 MariaDB는 자매나 마찬가지여서 MySQL에서 사용하던 SQL 문장은
MariaDB에서 그대로 사용할 수 있다.
SQL의 종류
SQL은 여러 개의 다양한 문장으로 구성되어 있다.
데이터 정의어(DDL, Data Definition Language)는 이름 그대로 무언가를 정의할 때 사용하는 SQL 문장이다.
보통 약어만 사용해 DDL이라고 한다. 무엇을 정의하는걸까?
대상은 테이블, 인덱스, 뷰 같은 데이터베이스 객체이다. 즉 테이블을 비롯해 어떤 객체를 생성할 때
사용하는 문장이다. 생성만 하는것이 아니라 이미 만들어진 객체를 수정하거나 삭제할 때도 DDL을 사용한다.
| 종류 | 설명 |
| CREATE | 데이터베이스 객체를 생성할 때 사용한다 |
| ALTER | 기존 객체를 수정할 때 사용한다 |
| DROP | 기존 객체를 삭제할 때 사용한다 |
| TRUNCATE TABLE | 테이블에 있는 데이터 전체를 삭제할 때 사용한다 |
| RENAME TABLE | 테이블의 이름을 변경할 때 사용한다 |
데이터 조작어(DML, Data Manipulation Language)도 이름 그대로 데이터를 조작(가공)하는 데 사용하는 언어이다.
데이터를 조작한다는 것은 데이터를 조회, 입력, 수정, 삭제하는 네 가지 작업을 일컫는다.
SQL 전체 문장 중 실제로 사용되는 빈도를 보면 DML이 90%가 넘는다.
| 종류 | 설명 |
| SELECT | 테이블에 있는 데이터를 조회할 때 사용한다. SQL 전첵에서 DML이 90%를 차지하고
DML 전체에서 SELECT 문이 90% 이상 사용되므로 가장 기본이자 많이 사용하는 문장이다 |
| INSERT | 테이블에 데이터를 새로 넣을 때(입력할 때) 사용한다 |
| UPDATE | 테이블에 입력된 데이터를 수정할 때 사용한다 |
| DELETE | 테이블에 있는 데이터를 삭제할 때 사용한다 |
테이블에서 데이터를 삭제하는 방법은 두 가지이다.
DML인 DELETE문을 사용하는 방법과 DDL인 TRUNCATE TABLE문을 사용하는 방법이다.
DELETE는 데이터 전체를 삭제할 수도 있고, 조건에 맞는 일부 데이터만 삭제할 수 있지만
TRUNCATE TABLE문은 무조건 테이블 전체를 삭제한다.
그리고 DELETE 문으로 데이터를 삭제하더라도 트랜잭션 제어어인 ROLLBACK 문을 실행하면
삭제 전 상태로 돌아갈 수 있지만 TRUNCATE TABLE 문으로 데이터를 삭제하면 복구할 수 없다.
트랜잭션 제어어(TCL, Transaction Control Language)는 RDBMS의 특징 중 하나인 트랜잭션 처리를 수행하는 SQL 문장이다.
MYSQL에서는 공식적으로 TCL이라는 용어를 사용하지는 않지만, 일반적으로 트랜잭션을 처리하는 문장을 TCL이라고 한다.
| 종류 | 설명 |
| COMMIT | 데이터 조작 작업이 성공하면 모든 데이터 변경사항(입력, 수정, 삭제)을 반영하는 문장이다 |
| ROLLBACK | 데이터 조작 작업이 실패하거나 작업을 취소하고 싶을 때 사용한다 ROLLBACK문을 실행하면 데이터를 입력하거나 수정, 삭제한 모든 작업이 취소되고 데이터는 변경 전 상태로 되돌아간다 |
| START TRANSACTION 또는 BEGIN |
새로운 트랜잭션이 시작됨을 알리는 문장이다 START TRANSACTION 또는 BEGIN 문이 실행된 후에 입력된 DML 문장부터 COMMIT 문이나 ROLLBACK 문을 만날 때까지가 하나의 트랜잭션이 된다 |
| SAVEPOINT | 트랜잭션에 이름을 부여하는 문장이다 SAVEPOINT 문을 사용하면 지정된 이름으로 트랜잭션이 시작되고, COMMIT이나 ROLLBACK 문을 만나면 트랜잭션이 종료된다 |
| SET autocommit | 트랜잭션을 처리하는 문장이 아니라 MySQL에서 자동 커밋(autocommit) 모드를 설정하는 문장이다 자동 커밋이 활성화되면 모든 DML 문장을 실행하고, 별도로 COMMIT 문을 실행하지 않아도 자동으로 데이터의 변경사항이 적용된다 MySQL은 기본적으로 자동 커밋 모드가 활성화되어있다 |
TCL은 데이터의 변경사항을 최종으로 적용하는 역할을 한다.
따라서 DML 중 SELECT을 제외한 INSERT, UPDATE, DELETE 문을 수행한 후 TCL문장들을 사용한다.
데이터 제어어(DCL, Data Control Language)는 데이터에 대한 접근이나 기타 권한을 제어하는 문장이다.
MySQL에서 공식적으로 사용하는 용어는 아니다.
| 종류 | 설명 |
| GRANT | 특정 사용자에게 특정 작업을 수행할 수 있는 권한을 부여한다 |
| REVOKE | 부여된 권한을 회수한다. |