본문 바로가기
Database

[Database] Insert into select, select into, View, DTL(Data Transactional Language)

by 구루미94 2022. 4. 19.

1. insert into select

- 테이블이 있는 상태에서 다른 테이블의 레코드를 검색해서 집어넣기

- 동일한 스키마를 전제

- 한번에 여러개의 레코드를 넣는 방법

 

2. select into

- 테이블이 없는 상태에서 다른 테이블의 레코드를 검색해서 집어넣기

- MySQL에서는 지원하지 않음

- MySQL: create table as select 사용

 

3. View

- 쉽게 말해서 임시 테이블

- select 쿼리 값을 뷰에 저장하고 일반 테이브로가 동일하게 사용

- 라이프사이클(수명)이 상대적으로 짧음

- 원본데이터가 수정되면 View의 내용은 바뀌게 혹은 바뀌지 않게(default) 설정할 수 있음

- 기본적으로 view는 읽기 전용이지만 업데이트/ 수정/ 추가 가능한 view 존재

 

4. 트랜잭션

- 트랜잭션(ACID)를 보장한다는 것

  : 커밋/ 롤백 보장, 일관성 보장, 격리성 보장, 내구성 보장

- 트랜잭션의 ACID 특성

  : 원자성, 일관성, 격리성, 내구성

- All or Noting : 실행이 되든지 안되든지. 중간에 멈추는 일은 없어야 함. (Commit or Rollback)

- 여러 줄의 SQL 쿼리를 실행할 때 장애가 발생했을 경우 쿼리 전체를 취소하거나 확정

- MySQL에서 트랜잭션지원여부가 스토리지엔진에 따라 다름

  (인덱스지원, 락, 조인여부(외래키) 등의 지원여부도 달라짐)

 

5. 스토리지엔진

(1) MyISAM

- 가장 오래된 엔진

- 트랜잭션/ 외래키 지원하지 않음 -> 조인 불가

- 테이블락

- 풀텍스트 인덱스지원

- R-트리 인덱스지원

 

(2) InnoDB

- MySQL의 기본값

- 트랜잭션/ 외래키 지원

- 레코드락

- MVCC 지원 (Multi-Version Concurrency Control)

- 풀텍스트 인덱스 지원

- R-트리 인덱스 지원

 

(3) Memory

- 임시테이블

- 트랜잭션 안정성/ 외래키 지원하지 않음

- 테이블락

- 읽기는 우수하나 쓰기 성능은 떨어짐

 

(4) NDB 클러스터

- Network DataBase Cluster

- 트랜잭션 지원

- 레코드락

- 외래키 지원하지 않음

 

(5) TokuDB

- 프렉탈 트리 인덱스

- 트랜잭션 제공

 

(6) Aria(Maria DB)

- MyISAM 스토리지엔진 대응

 

(7) XtraDB(Maria DB)

- InnoDB 스토리지엔진 대응 (InnoDB를 사용 못하기 때문에 만듦)

- Percona에서 만든 엔진

- MariaDB에서는 XtraDB/ InnoDB를 버전별로 다른 것을 탑재

 

(8) Cassandra((Maria DB)

- MariaDB 10.0 부터 NoSQL 대응용 스토리지엔진

 

5. MySQL(InnoDB)의 트랜잭션

- InnoDB가 기본 스토리지엔진

- MySQL의 InnoDB엔진은 기본설정이 트랜잭션 미지원상태

- autocommit 모드(줄단위 커밋) 자동커밋 -> 롤백불가

- 트랜잭션이 지원되게 하려면 기본 설정을 변경해야.

 

6. SAVEPOINT

- Commit/ Rollback 사이의 중간값

- 롤백을 트랜잭셕 시작이 아닌 savepoint 까지 롤백

- 여러개의 savepoint 생성가능

- 스토리지엔진에 따라 지원여부 다름(InnnoDB는 지원)

 

7. DDL 문의 트랜잭션

- DDL문은 롤백 안됨 (create, alter, drop)

728x90

댓글