이 블로그 내용은 real Mysql
내용을 정리한 내용입니다.
Mysql 아키텍쳐
참고) https://velog.io/@mooh2jj/MySQL-vs-PostgreSQL
스토리지 엔진 : MyISAM vs InnoDB(mysql5.5버전 이후)
참고) https://velog.io/@mooh2jj/Mysql-InnoDB-vs-MyISAM
✳️ 부모테이블(PK) - 자식테이블(PK,FK)
=> 자식테이블이 FK를 가진다!
식별관계
부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하는 관계
비식별관계
부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하지 않고, 외래 키로 사용하는 관계
참고) https://deveric.tistory.com/108
DB 인덱스 자료구조: B-tree
참고#1) https://velog.io/@mooh2jj/DB-인덱스를-설정하면-왜-빨라지지
참고#2) https://velog.io/@mooh2jj/DB-인덱스는-왜-B-Tree-구조인가
index 설정 이후 조회속도 개선 확인
https://velog.io/@mooh2jj/MySQL-실행계획으로-성능-측정하기인덱스-설정-이후
pk(클러스터인덱스) vs unique(보조인덱스) vs 일반 index(보조인덱스) vs fk(constraint)
1) pk(클러스터 인덱스) = unique + not null
: pk는 테이블당 딱 1개, 레코드당 lock 걸게 해줌(레코드당 단위잠금)
2) unique = 유일성, 제약조건(Duplicate)에 더 가까운 키
3) fk 보조키 (테이블 constraint(제약조건) 기능)
: 다른 테이블의 기본키(PK) 필드를 참조하는 데이터의 무결성(Referential integrity)
을 확인하기 위해 사용되는 키, 인덱스가 생성되지만 제약조건을 위한 키
참고) https://12bme.tistory.com/150
RDBMS 릴레이션 키(후보키 vs 복합키 vs 대리키 vs 대체키)
0) 후보키(Candidate Key)
: 기본키(pk)가 될 수 있는 후보 속성들. 이중에서 기본키, 대체키 등이 나오는 것이다.
1) 복합키(Composite Key)
: 기본키(pk)로 쓰는 컬럼을 두개 이상으로 묶어서 정의한 키
2) 대리키(Surrogate Key)
: 인공키라고도 불림, UUID같은 것을 써 외부에 노출되도 되는 식별자로 이용, 참고) https://velog.io/@mooh2jj/DB-대리키에-대하여
3) 대체키(Alternate Key)
: 후보키 중에 기본키로 선정되지 않은 속성
트랜잭션 ACID
참고) https://velog.io/@mooh2jj/DB-Transaction과-ACID
커밋과 롤백 자동처리 : InnoDB unDo x reDo 로그로 백업!
DB 동시성 이슈
=> 해결은 schronized(동기화), Lock(잠금)!
Lock이란? 트랜잭션이 시작되면, 이용하고 있는 Row, Table은 트랜잭션이 끝날 때까지 점유하는 메카니즘!
트랜잭션의 데이터 일관성 및 무결성을 유지하고 동시성 제어에 필요!
but! 성능저하와 심하면, Dead Lock이 아예 어플리케이션이 멈출 수 있는 불상사가 있을 수 있다!
참고) https://velog.io/@mooh2jj/트랜잭션-동시성-제어-정리
스프링 AOP 기능 중 @Transactional
가 DB 트랜잭션 처리를 대신 해준다.
real Mysql 8.0 개정판
>1, 2권