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)
'Database' 카테고리의 다른 글
[Database] DDL 제약조건, DCL(Data Control Language), DML (0) | 2022.04.19 |
---|---|
[Database] DDL(Data Definition Language)/ Join (0) | 2022.04.19 |
[Database] DML(Data Manupulation Language) 1 (0) | 2022.04.19 |
[Database] RDBMS 연산, 키(슈퍼키, 후보키, 기본키, 대체키, 외래키), 식별관계와 비식별관계 (0) | 2022.03.17 |
[Database] RDBMS의 기본구조 (테이블, 외래키, 정규화) (0) | 2022.03.17 |
댓글