본문 바로가기
DB

SQL

by 요섹남 2023. 9. 21.

SQL 이란?

- SQL은 DBMS에 데이터를 구축, 관리하고 활용하기 위해서 사용되는 언어가 'SQL' 이다.

- SQL은 데이터베이스 용 프로그래밍 언어이다.

- SQL은 구조화된 쿼리 언어이며, 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.

쿼리(query)란 무엇일까?

- 쿼리는 질의문 이라는 뜻을 가지고 있습니다. 예를 들어 검색할 때 입력하는 명령하는 단어가 일종의 쿼리이다.

- 검색을 진행하면서 기존에 존재하는 데이터를 바탕으로 명령한 검색어로 필터링을 진행한다.

 

프로그래밍 언어와 차이점

- 프로그래밍 언어는 배열에 저장된 전체 data를 요청하기 위해서 해당 배열이 저장된 경로를 지정하고, 반복문으로 각 요소의 data를 호출한다

- SQL은 데이터베이스 table 에서 recode에 저장된 전체 data를 호출한다.

 

쿼리의 실행 과정

1. 쿼리 캐시

- SQL 실행 결과를 메모리에 캐싱

- 동일 SQL 실행시 이전 결과를 즉시 반환

- 테이블의 데이터가 변경되면 캐싱된 데이터 삭제 필요

 

2. 쿼리 파서

- 쿼리 파서에는 어휘 스캐너와 문법규칙 모듈 두개로 이루어짐

- 어휘 스캐너는 쿼리를 토큰으로 각각 분해하게 됨

- 문법 규칙 모듈은 이 시퀀스를 생성하는 SQL 문법 규칙의 조합을 찾고 해당 규칙과 관련된 코드를 실행

- 옵티마이저가 실행 할 수 있는 parse tree가 생성된다.

 

3. 전처리기

- parse tree를 기반으로 문장 구조를 체크

- parse tree의 토큰이 유효한지 체크

 

4. 옵티마이저

- SQL 실행을 최적화해서 실행 계획을 짬

- 규칙 기반 최적화 : 옵티마이저에 내장된 우선순위에 따라 실행 계획 수립

- 비용 기반 최적화: 작업의 비용과 대상 테이블의 통계 정보를 활용해서 실행 계획 수립

 

5. 쿼리 실행 엔진

- 옵티마이저가 만든 실행 계획대로 스토리지 엔진을 호출해서 케로드를 읽고 사용한다

 

6. 스토리지 엔진

- 쿼리 실행 엔진이 요청하는 대로 데이터를 저장하고 읽는다.

- 대표적으로 InnoDB, MyISAM 스토리지 엔진이있다.

- 핸들러 API에 의해 동작

- 핸들러라고도 불림

- 플러그인 형태로 제공

- 검색어 parser, 사용자 인증 모듈 등도 플러그인 형태로 제공

- 플러그인끼리는 통신이 불가능

- mysql 서버의 변수나 함수를 직접 호출해서 캡슐화를 위반한다.

보기좋게 정리한 사이트https://velog.io/@alicesykim95/DB-DDL-DML-DCL-TCL%EC%9D%B4%EB%9E%80

DDL

DDL은 명령어를 입력하는 순간 작업이 즉시 반영(Auto Commit)되기 때문에 사용할 때 주의해야 한다.

 

DDL 종류

- CRATE : 테이블 생성

- ALTER : 테이블 수정

- DROP : 테이블 삭제

- RENAME : 테이블 이름 수정

- TRUNCATE : 테이블 초기화

1. CREATE 규칙

  • 객체를 의미하는 것이므로 단수형으로 이름을 짓는걸 권고한다.
  • 유일한 이름으로 명명해야 한다.
  • 테이블 내의 컬럼명 또한 중복되지 않는 유일한 이름으로 명명해야 한다.
  • 정의할 때 각 컬럼은 ,으로 구분하며 테이블 생성문의 마지막은 ;이다.
  • 컬럼명은 데이터 표준화 관점에서 일관성 있게 사용해야 한다.
  • 컬럼 뒤에 데이터 유형을 반드시 지정해야 한다.
  • 테이블과 컬럼명은 반드시 문자로 시작한다.
  • 대소문자 구분을 하지 않지만, 기본적으로 대문자로 만들어진다.

DML

DDL과 달리 DML은 적는 즉시 반영(Auto Commit)이 되기 않는다. 다시 말해, DML에 의한 데이터 변동은 영구적인 변경이 아니기 때문에 ROLLBACK으로 다시 되돌릴 수 있다.

또한, DML은 Target 테이블 메모리 버퍼 위에 올려두고 변경을 수행하기 때문에, 실시간으로 테이블에 반영되지 않는다. Commit 명령어를 통해 Transaction을 종료해야 해당 변경 사항이 테이블에 반영된다.

 

DML 종류

- SELECT : 데이터 검색

- INSERT : 데이터 추가

- UPDATE : 데이터 수정

- DELETE : 데이터 삭제

 

DCL (Data Control Language) 데이터 제어 언어

데이터를 관리 목적으로 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용한다. DCL을 사용하면 데이터베이스에 접근하여 읽거나 쓰는 것을 제한할 수 있는 권한을 부여하거나 박탈할 수 있고 트랜잭션을 명시하거나 조작할 수 있다.

 

DCL 특징

불법적인 사용자로부터 데이터를 보호하기 위한 데이터 보안의 역할을 수행하며, 데이터의 정확성을 위한 무결성을 유지하기도 한다. 마지막으로 시스템 장애에 대비한 회복과 병행수행을 제어한다.

 

DCL 종류

- GRANT : 권한 정의

- REVOKE : 권한 삭제

 

TCL (Transaction Control Language) 트랜잭션 제어 언어

DCL과 비슷한 맥락이지만 데이터를 제어하는 언어가 아닌 트랜잭션을 제어할때 사용한다. 논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를 트랜잭션 별로 제어한다.

 

트랜잭션 이란?

데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말한다. 보통 DBMS 선능을 초당 트랜잭션이 몇개가 실행되었는지로 측정한다. MySQL의 입력하는 모든 명령어들은 각각 하나의 트랜잭션이라고 할 수 있다.

 

참조 무결성

무결성이란 데이터베이스에서 저장된 값들에 대하여 여러가지 제한을 통하여 데이터에 대한 신뢰를 보장하게 하여 일관성을 유지시켜주는 것입니다.

 

1. 영역 무결성

- 한 컬럼에 대해 NULL의 허용 여부와 타당한 데이터 값들을 지정합니다.

- 자료형(Data type), 규칙과 제약(Rules), 값 범위 등을 제한합니다.

 

2. 참조 무결성

- 기본 키와 참조 키 간의 관계가 항상 유지됨을 보장합니다.

- 참조되는 테이블의 행을 이를 참조하는 참조키가 존재하는 한 삭제될 수 없고, 기본키도 변경될 수 없습니다.

 

3. 개체 무결성

- 테이블에 있는 모든 행들이 유일한 식별자를 가질 것을 요구합니다.

 

참조 무결성이란 관련된 테이블의 레코드 간의 관계를 유효하게 하는 규칙으로, 사용자의 실수로 관련 데이터가 삭제되거나 수저되느 것을 막아줍니다. 참조 무결성을 설정할 수 있는 조건은 기본 테이블에서 이치하는 필드가 기본키 이거나, 고유 인덱스를 갖고 있거나, 관련 필드 의 데이터 형식이 같아야 합니다.

 

참조 무결성의 조건

- 기본 테이블에서 사용한 필드는 기본키이거나 고유 인덱스가 설정되어 있어야 합니다.

- 기본 테이블과 관계 테이블 둘 다 액세스 테이블이어야 합니다.

- 관계를 설정하는 테이블은 형식이 같아야 합니다.

 

참조 무결성의 강화 규칙

- 기본 테이블과 관계가 설정된 테이블에 일치하는 레코드가 존재하면 기본 테이블에서 레코드를 삭제할 수 없습니다. 또한 기본키를 수정할 수도 없습니다.

- 기본 테이블의 기본키 필드에 없는 데이터는 관계가 설정된 테이블의 외래 키 필드값으로 입력할 수 없습니다.

- 기본 테이블의 기본 키 필드값이 바뀌면 관계가 설정된 테이블의 필드값도 바뀌도록 설정할 수 있습니다.

- 기본 테이블의 레코드를 삭제할 때, 관계가 설정된 테이블의 레코드가 자동삭제 되도록 설정할 수 있습니다.

casecade

참조 무결성 제약 조건이 깨지는 명령을 실행할 경우 일반적으로 명령을 거부하지만 Cascading 옵션을 통해 참조 무결성이 깨지는 것을 허용하면서 관련된 모든 값을 업데이트하거나 삭제할 수 있도록 할 수 있습니다.