CS/DB
스키마와 테이블 정의
행복한 개복치
2023. 5. 15. 17:20
SQL 데이터 타입
숫자형
- 정수형 : INTEGER, SMALLINT, …
- 실수형 : DECIMAL, FLOAT, REAL, DOUBLE
문자형
- 고정길이 문자열 : CHAR(n)
- 항상 n개 문자를 저장
- 가변길이 문자열 : VARCHAR(n)
- 최대 n개 문자까지 저장
날짜형
- DATE
- TIME
- TIMESTAMP : DATE & TIME
- INTERVAL
MySQL의 데이터 타입
- 숫자형(Numeric)
- 컬럼의 디폴트 부호 특성은 SIGNED
- 문자형(Character)
- 이진 문자형(Binary String)
- 날짜형(Temporal)
데이터 정의문(DDL)
SQL 명령문의 종류
- 데이터 정의문(DDL)
- 데이터 조작문(DML)
- 데이터 제어문(DCL)
- 트랜젝션 제어문(TCL)
💡 SQL 표준에서의 용어
- 릴레이션 → 테이블
- 속성 → 열, 컬럼
- 튜플 → 행
💡 SQL 형식 정의 기호
[…] : 생략 가능(0~1회)
{…}+ : 1회 이상 반복
{…}* : 0회 이상 반복
스키마 관련
CREATE SCHEMA
: 생성하려는 스키마의 명칭을 정의
CREATE {SCHEMA | DATABASE} 스키마명;
DROP SCHEMA
: 생성한 스키마를 제거
DROP {SCHEMA | DATABASE} 스키마명;
테이블 관련
CREATE TABLE
: 테이블의 구조와 컬럼의 제약조건을 명세
컬럼 제약조건
- NOT NULL : NULL 값을 허용하지 않음
- UNIQUE [KEY] : 고유한 값을 갖거나, 혹은 NULL 값을 허용함
- 내부적으로 저장장치에 인덱스를 생성하라는 명령임
- PRIMARY KEY : UNIQUE ^ NOT NULL 제약조건 (개체 무결성 유지)
- FOREIGN KEY : 부모 테이블의 PK 값 v NULL 값을 가짐 (참조 무결성 유지)
- CHECK : 입력/수정 가능한 값의 범위를 제한하는 논리식을 서술
CREATE TABLE 문의 일반 형식
컬럼 제약조건의 서술 위치에 따라 두가지 형식이 제공됨
- 컬럼 레벨 정의 방식
: 컬럼의 제약조건을 컬럼을 선언할 때 서술 - 테이블 레벨 정의 방식
: 컬럼의 제약조건을 모든 컬럼을 정의한 이후 아래에서 한꺼번에 서술
DROP TABLE
: 테이블 정의와 테이블 데이터를 모두 삭제함
DROP TABLE 테이블명 [RESTRICT | CASCADE]
- RESTRICT : 삭제할 튜플을 참조하는 튜플이 자식 테이블에 하나라도 존재하면, DBMS가 이 명령의 실행을 거부함
- CASCADE : 삭제할 튜플을 참조하는 튜플이 자식 테이블에 하나라도 존재하면, 자식 테이블의 참조하는 튜플들도 DBMS가 함께 삭제함
💡 MySQL에서 RESTRICT | CASCADE 옵션은 기능이 없음
다른 DBMS로의 포팅을 위해서만 사용
자식 테이블이 한 개라도 있으면 (빈 테이블이라도) 삭제가 거부됨
ALTER TABLE
- 컬럼의 추가/삭제/수정
- 제약조건의 추가/삭제
- 제약조건을 수정하려면 삭제 후, 수정된 제약조건을 추가하는 간접적인 방법으로 진행
추가 : ADD
삭제 : DROP
수정 : MODIFY
TRUNCATE TABLE
: 테이블 정의는 그대로 두고 테이블 데이터를 모두 삭제함
내부적으로는 DROP TABLE 문 실행 후, CREATE TABLE 문을 통해 테이블을 다시 생성함
TRUNCATE TABLE 테이블명;
💡 MySQL의 경우, 자식 테이블이 있으면 실행이 거부됨
DDL의 삭제와 DML의 삭제 차이
DDL (DROP / TRUNCATE) | DML (DELETE) | |
---|---|---|
트랜젝션 로그에 실행 기록 | 남기지 않음 → 시스템 부하 적음 | 남김 → 시스템 부하를 줌 |
AUTO COMMIT | O | X |
Rollback을 통한 데이터 복구 | 불가능 | 가능 |