github repo
https://github.com/nayeo2/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 |
제약조건 | 설명 | 예시 |
---|---|---|
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 |
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;
ALTER VIEW employee_view COMPILE;
DROP TABLE : 테이블 완전히 삭제
테이블에 관련된 모든 데이터, 인덱스, 제약 조건, 트리거, 권한 등을 제거, 복구 불가
DROP TABLE employees;
RENAME : 테이블의 이름 변경
RENAME TABLE employees TO staff;
TRUNCATE TABLE : 모든 데이터를 빠르게 삭제
나머지 정보는 내버려두고 오롯이 데이터만 삭제
롤백이 불가능. DELETE문보다 빠르게 삭제 가능
TRUNCATE TABLE employees;
DROP TABLE | TRUNCATE TABLE | |
---|---|---|
복구 가능성 | 테이블 자체 삭제. 복구 불가 | 데이터만 삭제. 구조 복구 가능 |
영향 받는 객체 | 인덱스, 제약조건, 트리거, 권한 등 모든 객체 삭제 | 오직 데이터만 |
속도 | 느릴 수 | 빠름 |
트랜잭션 및 롤백 | 트랜잭션 사용 롤백 가능 | 트랜잭션 x 롤백 불가 |
용도 | 완전히 제거 | 데이터만 빠르게 삭제 |
RDBMS에서 외래 키 제약 조건에서 사용된다.
참조된 테이블의 레코드가 삭제될 때 어떻게 처리할 지를 지정하는 옵션이다
-- 예시 코드
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_id
는 customers
테이블의 외래 키이다.customer
레코드가 삭제될 때,customer_id
를 참조하는 Order
테이블의 레코드도 함께 삭제된다.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)
);
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로 설정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
컬럼 값을 기본값으로 설정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)
);
```