0. 기본키 - PRIMARY KEY
-> 값 넣지 않아도 됨
-> 테이블마다 하나만 가능
-> 각 행을 고유하게 '식별'가능 -> 기본적으로 '인덱스'생성
: person_id 가 '기본키'라서 구분가능하다.
AUTO_INCREMENT
: 새 행 생성시 1씩 증가
-> 기본적으로 '기본키'와 함께 붙어다닌다
UNIQUE
: 중복입력 불가
VARCHAR
: 가변사이즈(경제적) -> 실제 글자수 +1
DATETIME
: 입력된 시간을 그대로 저장 '그 값 자체로'
1. 외래키 - FOREIGH KEY
-> null값이거나, or 부모테이블 '기본키'값과 같아야 한다
-> 다른 테이블의 '기본키'와 연결된다. "내가 1일때 쟤한테는 5다"
CASCADE : '자식 테이블'의 해당 행도 '수정' or '삭제'
-> 부모테이블에서 정하는것임
2. 뷰 - 가상의 테이블
-> '쿼리'를 테이블로 비슷하게 저장한다
: 실제 테이블이 아닌 실제 테이블에서 수행한 SELECT문을 실제테이블들을 JOIN하거나 '서브쿼리'등으로 이어서 표에 결과물을 출력한것을 실제테이블처럼 사용한다.
3. 인덱스
: 테이블에서 '특정 컬럼'이나 '다수의 컬럼'에 대한 '목차(색인)'을 생성한다
: 컬럼들에 대한 '목차' 생성 - 검색 가속화
: 조회는 빠르나, 테이블의 내용변경(추가, 삭제, 수정)시 시간 더 소모
-> PRIMARY(기본키)는 '인덱스'를 따로 지정할 필요가 없다.
4. 트랜잭션
: 외부가 아닌 내부적으로 움직이고 그걸 유추하는 방식
: 모든 구문이 성공 or 실패로 이어진다 : 원자성 -> 더 나뉘지 않음
: 은행 송금 예시 -> "거래 오류시 하나라도 실패하면 전체가 실패로 처리한다 "
ROLLBACK : '창고'에 들어가기전에 '책상'에서 취소 -> '백지화'
" 스프링에서 '쿼리'를 내부적으로 '트랜잭션'으로 실행하겠다"
COMMIT : 메모리상의 변화를 '영구저장'하는 '창고'로 넣는다.
SAVEPOINT : ROLLBACK할 '중간 지점' 설정
5. '사용자'와 '권한 다루기'
권한 : 원하는 권한만 주어 민감할 수 있는 권한은 '제한'한다.