03-13 학습! DB 가봅시당 🟥🟧🟨🟩🟦🟪🟫⬜⬛🫢🔔😎😊🤔😭⭐

데이터를 조작하기 위한 명령어
테이블 생성 시 정의한 모든 컬럼을 생성 순서와 동일한 순서로 입력!
😎 생략 가능한 컬럼
1. NULL이 허용된 컬럼
2. DEFAULT가 설정된 컬럼
3. AUTO_INCREMENT가 설정된 컬럼 (테이블마다 1개)
🫢 SUB QUERY에서 검색된 결과 집합을 한꺼번에 입력 가능!
NULL, DEFAULT 키워드 사용 가능!
기존 데이터를 수정
⭐ WHERE절 생략 시 전체 레코드가 수정 되니 유의할 것!
UPDATE와 JOIN
join과 함께 사용해서 정보 수정하기!
INSERT OR UPDATE
방법
ON DUPLICATE KEY UPDATE 컬럼명=값
WHERE절 생략 시 전체 레코드가 삭제되니 유의할 것!
transaction - 1.거래,매매 2.처리(과정)
계좌 이체 서비스
출금 서비스 + 입금 서비스 인데 입금 서비스가 장애가 생긴다면?🫢
모든 것이 처리되어야 한다!
ACID
Atomicity, Consistency, Isolation, Durability
잠금 : 동시성을 제어하기 위한 기능
격리 수준 : 하나 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨

성능 최적화
1. 트랜잭션 범위 최소화 잠금 유지 시간 줄이기
2. 적절한 격리 수준 선택해서 동시성 개선
3. 인덱스를 활용하여 성능 향상
START TRANSACTION - COMMIT - ROLLBACK (이름) - SAVEPOINT 이름
잠금 읽기
MYSQL은
MVCC를 관리한다 버전을 관리해서 각각의 트랜잭션 범위에 대한 반응 관리
🫢tx2가 x-lock을 관리하는 데이터에 tx1이 접근하면 무한 대기 된다!
for update , for share을 활용해서 lock을 관리할 수 있다!
숫자, 문자, 날짜, 기타
char로 한다면 trim 해줘야 하는걸 잊지 말자
varchar로 하는게 일반적으로 좋지만, 주민등록번호 같은 고정된 것은 char로 해도 굿
ENUM - 명시된 데이터들 중 하나의 값만 가질 수 있음 (단일 선택)
VS
SET - 비트마스크 형태로 저장된다, 여러 개의 값을 가질 수 있음 (다중 선택)
DATETIME - 고정된 날짜 정보 - 지역화된 정보
VS
TIMESTAMP - 협정 세계시(UTC) - 절대적 기준에 대비한 시간
(TIMESTAMP 추천! 지역 위치 함께 기술)
CREATE ALTER DROP
CREATE TABLE emp(
이름 타입 조건
키 제약 조건
CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES dept (deptno)
) ENGINE, CHARSET 등등 설정 가능
장점
1. 복잡한 쿼리문을 뷰로 저장하여 반복적으로 사용 가능 (복잡한 조인, 서브 쿼리등을 사용한 경우 효율적)
2. 뷰에 접근하는 사용자에게 미리 정의된 결과만을 보여줌
3. 뷰에 포함되는 컬럼은 베이스 테이블에 영향을 주지 않고 다른 이름으로도 참조 가능
단점
1. 데이터 조작은 제한 사항이 많음
create view 이름
as 서브쿼리
drop view 이름
alter view 이름
as 서브쿼리
Mysql의 경우 아래의 제약 조건은 인덱스 자동 생성됨
Primary Key, Unique, Foreign Key
데이터 2만건 이상이면 optima 해야함 프로시저 할거냐
장점
1. 빠른 처리
단점
1. 엄청 자주 바뀌는데 색인하면 뭔 소용 - 성능 저하됨
2. 메모리 엄청 씀
주의사항
자주 사용되는 컬럼 고려
컬럼의 분포도가 10~15퍼 이내 적용
CREATE INDEX ON
DROP INDEX ON
시험에 적용할 수 있는 알고리즘 정리하고 복기