[DB] DDL

Na young·2024년 2월 15일
0

DB

목록 보기
12/17

github repo
https://github.com/nayeo2/mySQL


CREATE TABLE문

  • 아래 표는 MySQL에서 사용하는 주요 데이터 타입에 대한 정보를 제공합니다.
데이터 타입설명예시
CHAR(n)고정 길이 문자열 (n: 1~255)CHAR(10)
VARCHAR(n)가변 길이 문자열 (n: 1~65535)VARCHAR(50)
DECIMAL(p, s)숫자형 (p: 전체 자릿수, s: 소수점 자릿수) 최대 65자리까지DECIMAL(10, 2)
INT(n)정수형(자리수)INT(5)
DATE날짜와 시간DATE
TIMESTAMP날짜와 시간 (나노초 정밀도)TIMESTAMP
LONGBLOB문자열 데이터 (최대 4GB)LONGBLOB

테이블 이름 생성 규칙

  1. 유효한 문자 사용: 알파벳, 숫자, 밑줄(_)
  2. 첫 글자: 알파벳
  3. 길이 제한: 일반적으로 30자 이내의 길이로 제한
  4. 의미 있는 이름 사용: 데이터를 담고 있는 내용을 명확하게 설명할 수 있도록. 축약어는 가능한 피하고, 전체 단어 사용하기
  5. 단수/복수형 일관성: 팀 내에서 사용하는 규칙으로
  6. 예약어 피하기

제약조건 (Constraints)

  • 데이터베이스 테이블의 열에 적용되어 데이터의 무결성을 유지하는 데에 도움을 준다.
제약조건설명예시
PRIMARY KEY테이블의 각 행을 고유하게 식별할 수 있는 키PRIMARY KEY (id)
UNIQUE열의 모든 값이 고유한지 확인UNIQUE (email)
FOREIGN KEY다른 테이블의 기본 키에 대한 참조를 설정하여 관계를 정의FOREIGN KEY (department_id) REFERENCES departments(department_id)
CHECK열의 값이 특정 조건을 만족하는지 확인CHECK (salary > 0)
NOT NULL열의 값이 NULL이 아닌지 확인NOT NULL

ALTER문

  • 기존의 데이터베이스 객체를 수정
  • 테이블, 인덱스, 시퀀스, 뷰 등의 데이터베이스 객체 변경

ALTER문 사용 사례

  1. 테이블에 열 추가, 수정, 삭제하기
  2. 제약 조건 추가, 수정, 삭제하기
  3. 인덱스 상태 변경하기 (활성화 또는 비활성화)
  4. 시퀀스의 시작값, 증가값, 최대값 등 변경하기
  5. 뷰 정의 변경하기

ALTER문 종류

1. ALTER TABLE : 기존 테이블 수정
열 추가, 열 삭제, 열 데이터 타입 변경, 제약 조건 추가/삭제/수정


-- 열 추가
ALTER TABLE employees ADD (middle_name VARCHAR(20));

-- 열 삭제
ALTER TABLE employees DROP COLUMN middle_name;

-- 데이터 타입 변경
ALTER TABLE employees MODIFY first_name VARCHAR(30);

-- 제약 조건 추가
ALTER TABLE employees ADD CONSTRAINT emp_email_unique UNIQUE (email);

-- 제약 조건 삭제
ALTER TABLE employees DROP CONSTRAINT emp_email_unique;

  1. ALTER VIEW : 기존 뷰 수정.
    뷰의 정의 변경, 뷰와 관련된 제약 조건 추가/삭제

ALTER VIEW employee_view COMPILE;

DROP TABLE, TRUNCATE TABLE, RENAME 명령어

  1. DROP TABLE : 테이블 완전히 삭제
    테이블에 관련된 모든 데이터, 인덱스, 제약 조건, 트리거, 권한 등을 제거, 복구 불가

    DROP TABLE employees;
  2. RENAME : 테이블의 이름 변경

    RENAME TABLE employees TO staff;
  3. TRUNCATE TABLE : 모든 데이터를 빠르게 삭제
    나머지 정보는 내버려두고 오롯이 데이터만 삭제
    롤백이 불가능. DELETE문보다 빠르게 삭제 가능

    TRUNCATE TABLE employees;

    DROP TABLE vs TRUNCATE TABLE

    DROP TABLETRUNCATE TABLE
    복구 가능성테이블 자체 삭제.
    복구 불가
    데이터만 삭제.
    구조 복구 가능
    영향 받는 객체인덱스, 제약조건, 트리거,
    권한 등 모든 객체 삭제
    오직 데이터만
    속도느릴 수빠름
    트랜잭션 및 롤백트랜잭션 사용
    롤백 가능
    트랜잭션 x
    롤백 불가
    용도완전히 제거데이터만 빠르게 삭제

ON DELETE

RDBMS에서 외래 키 제약 조건에서 사용된다.
참조된 테이블의 레코드가 삭제될 때 어떻게 처리할 지를 지정하는 옵션이다

  1. Cascading : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드도 함께 삭제한다
     -- 예시 코드
    CREATE TABLE Orders (
      order_id int PRIMARY KEY,
      customer_id int REFERENCES Customers(customer_id) ON DELETE CASCADE,
      order_date date,
      total_amount decimal(10,2)
    );
  • customer_idcustomers테이블의 외래 키이다.
    따라 customer레코드가 삭제될 때,
    customer_id를 참조하는 Order테이블의 레코드도 함께 삭제된다.
  1. Restrict : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드를 삭제하지 않는다

    -- 예시 코드
    CREATE TABLE Orders (
      order_id int PRIMARY KEY,
      customer_id int REFERENCES Customers(customer_id) ON DELETE RESTRICT,
      order_date date,
      total_amount decimal(10,2)
    );
    
  • cascading과 반대 개념
  1. Set Null : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드의 컬럼 값을 Null로 설정한다.

    -- 예시 코드
    CREATE TABLE Orders (
      order_id int PRIMARY KEY,
      customer_id int REFERENCES Customers(customer_id) ON DELETE SET NULL,
      order_date date,
      total_amount decimal(10,2)
    );
    • Orders 테이블의 레코드의 customer_id 컬럼 값을 Null로 설정
  2. Set Default : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드의 컬럼 값을 기본 값으로 설정한다

    -- 예시 코드
    CREATE TABLE Orders (
     order_id int PRIMARY KEY,
     customer_id int REFERENCES Customers(customer_id) ON DELETE SET DEFAULT,
     order_date date,
     total_amount decimal(10,2)
    );
    • Orders 테이블의 레코드의 customer_id 컬럼 값을 기본값으로 설정
  3. No Action : 참조된 레코드가 삭제될 때 해당 레코드를 참조하는 다른 레코드를 삭제하지 않는다

    -- 예시 코드
    CREATE TABLE Orders (
      order_id int PRIMARY KEY,
      customer_id int REFERENCES Customers(customer_id) ON DELETE NO ACTION,
      order_date date,
      total_amount decimal(10,2)
    );
    	```
    
  • 해당 customer_id를 참조하는 Orders 테이블의 레코드를 삭제하지 않는다
profile
개발어린이

0개의 댓글

관련 채용 정보