[2024.10.22] 필수 온라인 강의 Part5 데이터베이스 CH02 데이터베이스 생성과 관리
기본 키와 외래 키
- 키 (key)
- 조건에 맞는 데이터를 찾기 위한 식별자
- 우선 다룰 주요한 키는 기본 키, 외래 키, 고유 키 - - 관계형 데이터베이스는 테이블처럼 데이터를 관리
-> 각각의 열에 따라 행의 데이터들이 달라짐
- 각각의 데이터들을 지칭할때, 가장 중요한 열을 확인하기!!! - 기본 키 (Primary Key, PK)
- 행을 특정 지을 수 있는 단 하나의 데이터 : 가장 중요한 열!!!
- 중복되어서는 안되고, 고유해야 하며, NULL 이어서는 안됨
- 여러 열을 묶어 하나의 기본 키로 삼기도 한다
** 고유 키 (Unique Key) : 기본 키와 유사하나, 널(NULL)로 지정 가능 - 외래 키 (Foreign Key)
- 다른 테이블을 연결(참조)하기 위한 키
- 두 테이블 간의 관계를 표현하기 위한 키
-> 참조한 테이블이 변경/삭제될 경우
- SET NULL: 전부 NULL 값으로 채워라
- CASCADE: 함께 변경해라 (함께 삭제, 함께 업데이트)
- RESTRICT: 삭제, 업데이트 자체를 제한
데이터베이스와 테이블 생성하기
- MySQL이 관리하는 것들
- 데이터베이스(들)
- 테이블(들)
- 데이터를 의미하는 행과 열(들)
* 데이터에는 형이 있음 - MySQL에서는 데이터베이스를 스키마(Schema)로 표현
- 데이터베이스(스키마) 안에 여러 테이블이 포함 - 데이터베이스 다루기
데이터베이스(스키마) 생성 | 데이터베이스(스키마) 조회 |
데이터베이스(스키마) 사용 | 데이터베이스(스키마) 삭제 |
- 데이터베이스 내에서 테이블 생성
- 괄호로 자료형의 최대 길이 명시 가능, 다양한 제약 조건을 추가할 수 있음
- 자료형
- 숫자형
- TINYINT : 1바이트의 정수 (-128 ~ 127)
- SMALLINT : 2바이트의 정수 (-32768 ~ 32767)
- MEDIUMINT : 3바이트의 정수 (-8388608 ~ 8388607)
- INT : 4바이트의 정수 (-2147483648 ~ 2147483647)
- BIGINT : 8바이트의 정수 (-9223372036854775808 ~ 9223372036854775807)
- FLOAT : 4바이트 부동 소수점 실수
- DOUBLE : 8바이트 부동 소수점 실수
- DECIMAL : 고정 소수점 실수
- 문자형
- CHAR : 고정 길이 문자열
- VARCHAR : 가변 길이의 문자열
- BLOB : 바이너리 데이터
- TEXT : 텍스트 데이터
- 날짜/시간형
- DATE : 날짜
- TIME : 시간
- DATETIME : 날짜와 시간 (4 바이트)
- TIMESTAMP : 날짜와 시간 (8 바이트, Timezone 적용: 시스템 Timezone 변경되면 함께 변경)
- 기타 데이터 타입
- ENUM : 정해진 값들 중 하나만 저장
- SET : 정해진 값들 중 여러 개를 저장
- GEOMETRY : 지리 정보 저장
- XML: XML 데이터 저장
- JSON : JSON 데이터 저장 - 테이블 다루기
테이블들 조회 | 테이블 조회 |
- 테이블 변경 – 이름 변경
- 테이블 변경 – ALTER TABLE
- 테이블 삭제
- 테이블 구조까지 삭제함
- https://dev.mysql.com/doc/refman/8.0/en/drop-table.html
DROP TABLE IF EXISTS 테이블이름;
- 테이블 구조는 유지, 행만 삭제
데이터 입력
- CREATE TABLE 직후에는 아무런 행도 없는 상태
-> 데이터 추가하기: INSERT
-외래키 참조 상황에서 Insert
데이터 조회
- SQL에서 가장 중요한 복잡한 문법 중 하나, SELECT!
- SELECT의 핵심: 순서
- 연산 및 집계 함수
- LIKE를 이용한 패턴 검색
- WHERE를 이용한 조건 검색의 경우: 문자열이 완전하게 일치해야 함
- 사용 가능한 와일드카드 1. %: 임의의 문자열 2. _: 임의의 문자 (딱 하나)
- GROUP BY & HAVING
GROUP BY : 테이블 내 데이터를 그룹으로 묶어 조회하고 싶을 때! 주로 집계 함수와 함께 사용
HAVING : 그루핑된 결과를 통해 필터링을 하고 싶을 때 사용
- 그루핑된 결과는 WHERE로 조건식을 걸 수 없다
- 각각의 유저id별로 합계를 볼 수 있다. - 각각에 맞추어서 - 서브 쿼리
- 쿼리 속의 쿼리 (쿼리 속의 select)
데이터수정
- 데이터 수정을 위한 UPDATE
- where를 이용해 특정 행을 식별 (조건에 일치하는 모든 행을 대상으로 업데이트)
- where가 생략된 경우 모든 행이 갱신
- set에 사용된 =는 대입 연산자
- 참조 시 UPDATE (on update) on update
- cascade : 참조 데이터 업데이트 시 상대방 데이터도 함께 업데이트
- set null : 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Null로 업데이트
- set default : 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Default 값으로 업데이트
- restrict : 참조하고 있을 경우, 업데이트 불가
- no Action : Restrict와 동일, 옵션을 지정하지 않았을 경우 자동으로 선택됨
데이터 삭제
데이터 삭제를 위한 DELETE
- 조건에 맞는 데이터 삭제
- 테이블의 모든 데이터 삭제
- 참조 시 DELETE (on delete) on delete
cascade : 참조 데이터 업데이트 시 상대방 데이터도 함께 삭제
set null : 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Null로 업데이트
set default : 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Default 값으로 업데이트
restrict : 참조하고 있을 경우, 삭제 불가
no Action : Restrict와 동일, 옵션을 지정하지 않았을 경우 자동으로 선택됨
'Study > CS 기초' 카테고리의 다른 글
데이터베이스 - NoSQL (1) | 2024.11.01 |
---|---|
데이터베이스 - 효율적 쿼리 (0) | 2024.11.01 |
데이터베이스 거시적으로 보기 (1) | 2024.10.30 |
소켓 프로그래밍 (0) | 2024.10.29 |
시스템 프로그래밍 - 프로세스와 스레드 (1) | 2024.10.28 |