카테고리 없음

SQL 첫걸음 6장_데이터베이스 객체 작성과 삭제

haenaneah 2025. 4. 5. 23:18

25강. 데이터베이스 삭제

 

1. 데이터베이스 객체

- 객체는 데이터베이스 내에 존재하는 실체를 가진 것 (예: 테이블, 뷰, 인덱스 등).

- SELECT, INSERT 같은 SQL 명령은 객체가 아님.

- 객체는 고유한 이름을 가지며, 이름은 명명규칙을 따라야 함.

 

2. 객체 이름 규칙

- 기존 이름과 중복 불가

- 숫자로 시작 불가, _ 제외한 특수문자 사용 불가

- 예약어는 백틱(``) 또는 쌍따옴표("")로 감싸야 함

- 의미 있는 이름을 사용 (예: sample61 같은 무의미한 이름은 피함)

 

3. 스키마

- 데이터베이스 객체가 저장되는 그릇(네임스페이스) 역할

- 스키마가 다르면 같은 이름의 객체도 공존 가능

- MySQL: 스키마 = 데이터베이스 / Oracle: 사용자별 스키마 존재


26강. 테이블 작성·삭제·변경 (DDL 문법 중심)

 

1. 테이블 작성 (CREATE TABLE)

CREATE TABLE 테이블명 ( 열이름 자료형 [DEFAULT 기본값] [NULL | NOT NULL] );

- CHAR, VARCHAR 사용 시 최대 길이 지정 필요

- NOT NULL 지정 시 반드시 기본값 필요

 

2. 테이블 삭제 (DROP TABLE)

DROP TABLE 테이블명;

 

- 테이블과 그 안의 데이터도 함께 삭제

- 실행 시 확인 메시지 없음, 신중하게 사용

 

- 관련 명령어

DELETE: 테이블 구조는 유지하고 데이터만 삭제

TRUNCATE TABLE: 전체 행을 빠르게 삭제, WHERE 조건 사용 불가

 

3. 테이블 변경 (ALTER TABLE)

 

- 열 추가

ALTER TABLE 테이블명 ADD 열정의;

 

- 열 속성 변경

ALTER TABLE 테이블명 MODIFY 열정의;

 

- 이름 변경 불가, 자료형, 제약조건 변경 가능

 

- 열 이름 변경

ALTER TABLE 테이블명 CHANGE 기존열 새열 열정의;

 

- 열 삭제

ALTER TABLE 테이블명 DROP 열이름;

 

알아두면 좋은 내용

 

- 열을 추가할 때 기존 INSERT 문에서 열 지정을 생략하면 에러가 날 수 있음.

- ALTER TABLE은 시스템에 영향을 줄 수 있으니 적용 전 테스트 필수.


27강 - 제약 (Constraints)

- 제약 : 테이블에 저장되는 데이터를 제한하는 규칙.

(예시) NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY 등.

- 데이터 무결성을 유지하고, RDBMS 설계에 중요함.

 

제약 정의 방법


- CREATE TABLE 시 정의하거나, ALTER TABLE로 나중에 추가/변경 가능.

 

- 열 제약 (Column Constraint)

: 한 열에 설정되는 제약

a INTEGER NOT NULL, b INTEGER NOT NULL UNIQUE

 

- 테이블 제약 (Table Constraint)
: 여러 열을 아우르는 제약

PRIMARY KEY (no, sub_no)

 

- 제약에 이름(CONSTRAINT) 붙이면 관리 편리함.

CONSTRAINT pkey_sample PRIMARY KEY (no, sub_no)

 제약 추가 & 삭제

 

- 제약 추가:

> 열 제약: ALTER TABLE MODIFY

ALTER TABLE sample MODIFY c VARCHAR(30) NOT NULL;

 

테이블 제약: ALTER TABLE ADD CONSTRAINT

ALTER TABLE sample ADD CONSTRAINT pkey PRIMARY KEY(a);

 

- 제약 삭제:

> 열 제약: MODIFY로 제약 제거

ALTER TABLE sample MODIFY c VARCHAR(30);

 

- 테이블 제약: DROP CONSTRAINT 또는 DROP PRIMARY KEY

ALTER TABLE sample DROP CONSTRAINT pkey; ALTER TABLE sample DROP PRIMARY KEY;

 

기본키 (Primary Key)


- 행을 고유하게 식별하는 키.

- 반드시 NOT NULL이어야 하고, 중복 불가.

- 복수 열도 가능:

PRIMARY KEY (a, b)

 

- 기본키는 SELECT 시 빠르게 특정 행을 찾는 데 사용됨.


28강: 인덱스 구조

- 인덱스 : 

- 테이블에 붙는 검색 속도를 높이는 객체.

- 책의 목차/색인처럼 특정 데이터를 빠르게 찾을 수 있게 도와줌.

- WHERE절에 조건이 있을 때 속도 향상 효과 큼.

 

검색 방법 비교

 

(1) 풀 테이블 스캔 (Full Table Scan)

- 모든 행을 처음부터 끝까지 순차 검색

- 비효율적, 느림

 

(2) 이진 탐색 (Binary Search)

 

- 정렬된 상태에서 중간값 기준으로 반씩 나누며 탐색

- 훨씬 빠름 (검색 횟수 급감)

 

(3)이진 트리 (Binary Tree)

- 이진 탐색을 위해 데이터를 구조화한 것

- 실제 DB 인덱스 구조는 B-Tree 등 고급 구조 사용

 

; 제약은 데이터의 정확성 보장.

; 기본키는 유일성 & NULL 불가.

; 인덱스는 SELECT 성능 향상.

; 이진 탐색은 대용량 데이터에 강력함.


29강 - 인덱스 작성과 삭제

- 인덱스 : 검색 성능을 높이기 위한 데이터베이스 객체. 테이블의 열 값을 기준으로 색인을 만들어 빠르게 데이터를 찾을 수 있게 도와줌.

 

- 작성 :

CREATE INDEX 인덱스명 ON 테이블명 (열1, 열2, ...);

- 테이블의 특정 열에 인덱스를 걸면 SELECT 속도는 향상, 하지만 INSERT/UPDATE는 느려질 수 있음 (인덱스 갱신 필요).

 

 

- 삭제 :

DROP INDEX 인덱스명 ON 테이블명;

 

 

 

- EXPLAIN으로 인덱스 사용 여부 확인 가능

EXPLAIN SELECT * FROM 테이블명 WHERE 조건;

 

- possible_keys와 key에 인덱스가 나오면 사용 중이라는 의미.


30강 - 뷰(View) 작성과 삭제

- 뷰 : SELECT 문 결과를 가상 테이블처럼 다룰 수 있는 데이터베이스 객체.

: 자주 쓰거나 복잡한 SELECT 문을 재사용할 때 유용함.

 

 

- 작성 :

CREATE VIEW 뷰명 AS SELECT 문;

 

-  열 이름을 지정할 수도 있음.

 

 

- 삭제 :

DROP VIEW 뷰명;

 

 

- 뷰는 실체가 없는 가상 테이블
> INSERT/UPDATE/DELETE는 가능하긴 하지만 주의 필요

 

- 머티리얼라이즈드 뷰:
> 일반 뷰의 약점을 보완, SELECT 결과를 실제로 저장하는 뷰 (단, MySQL에서는 지원 안 함).

 

- 뷰의 약점:
>상관 서브쿼리처럼 외부 쿼리와 연관되는 SELECT는 뷰로 만들 수 없음 → 이럴 땐 함수 테이블로 회피.