[SQL] 데이터베이스 객체 작성 & 삭제

가비·2020년 12월 25일
0

[SQL]

목록 보기
6/13

데이터베이스 객체란? 테이블이나 뷰, 인덱스 등 데이터베이스 내에 정의하는 모든 것을 일컫는다.

데이터베이스 객체

  • 객체란 데이터베이스 내에 실체를 가지는 것을 말하고 객체의 종류에 따라 데이터베이스에 저장되는 내용도 달라진다.
    ex 데이터베이스 테이블
  • 객체는 이름을 가지며 객체를 작성할 때는 이름이 겹치지 않도록 하고 의미 없는 이름을 붙이지 않도록 한다.
    !but 열이나 별명은 객체가 아니다.

명명규칙

  • 기존 이름이나 예약어와 중복하지 않는다.
  • 숫자로 시작할 수 없다.
  • 언더스코어(_) 이외 기호는 사용할 수 없다.
  • 한글을 사용할 때는 더블쿼트(MySQL은 백쿼트)로 감싼다.
  • 시스템이 허용하는 길이를 초과하지 않는다.

스키마

  • 데이터베이스 객체는 스키마 안에 만들어진다.
    👉 이러한 특징 때문에 데이터베이스 객체는 '스키마 객체'라 불리기도 하고 데이터베이스에 테이블을 작성해서 구축해나가는 작업을 '스키마 설계'라고 한다.
  • 객체의 이름이 같아도 스키마가 다르면 상관없다.
    👉 스키마나 테이블은 네임스페이스(namespace)
  • 스키마는 SQL 명령의 DDL(Data Definition Language)을 이용하여 정의한다.
  • 어떤 것이 스키마가 되는지는 데이터베이스 제품에 따라 달라진다.
    👉 MySQL에서는 CREATE DATABASE 명령으로 작성한 데이터베이스가 스키마가 된다.

테이블 작성, 삭제, 변경

테이블 작성

# CREATE TABLE 테이블명(열 정의1, 열 정의2 ...)
CREATE TABLE 테이블명(열명 자료형 [DEFAULT] [NULL|NOT NULL])
mysql> CREATE TABLE sample62(
    -> no INTEGER NOT NULL,
    -> a VARCHAR(30),
    -> b DATE);
Query OK, 0 rows affected (0.01 sec)

mysql> DESC sample62;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int         | NO   |     | NULL    |       |
| a     | varchar(30) | YES  |     | NULL    |       |
| b     | date        | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
  • 열을 정의할 때는 테이블에 필요한 열을 콤마(,)로 구분하여 연속 지정한다.
  • CHAR나 VARCHAR 같은 문자열형으로 지정시 최대길이를 괄호로 묶어줘야 한다.
  • 기본값과 NULL은 생략 가능하다.

테이블 삭제

DROP TABLE 테이블명
  • 명령 실행시 확인을 요구하지 않으니 주의❗️

데이터 행 삭제

TRUNCATE TABLE 테이블명
  • TRUNCATE TABLE 명령은 모든 행을 삭제해야 할 때 빠른 속도로 삭제할 수 있다.
    👉 DELETE 명령은 행 단위로 여러 가지 내부처리가 일어나므로 삭제할 행이 많으면 처리속도가 상당히 늦어진다.

테이블 변경

ALTER TABLE 테이블명 하부명령

열 추가

ALTER TABLE 테이블명 ADD 열 정의
mysql> ALTER TABLE sample62 ADD newcol INTEGER;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC sample62;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| no     | int         | NO   |     | NULL    |       |
| a      | varchar(30) | YES  |     | NULL    |       |
| b      | date        | YES  |     | NULL    |       |
| newcol | int         | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
  • 열 정의는 CREATE 명령과 동일하다.
  • 기존 데이터행이 존재하면 추가한 열의 값은 모두 NULL이 된다.
    👉 기본값이 지정되어 있으면 기본값으로 저장
  • NOT NULL 제약이 걸린 열을 추가할 때는 기본값을 지정해야 한다.

열 속성 변경

ALTER TABLE 테이블명 MODIFY 열 정의
mysql> ALTER TABLE sample62 MODIFY newcol VARCHAR(20);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC sample62;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| no     | int         | NO   |     | NULL    |       |
| a      | varchar(30) | YES  |     | NULL    |       |
| b      | date        | YES  |     | NULL    |       |
| newcol | varchar(20) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
  • 기존의 데이터 행이 존재하는 경우 데이터도 변환된다.
    👉 자료형이 변경되면 자료형 역시 바뀐다.

열 이름 변경

ALTER TABLE CHANGE [기존 열 이름] [신규 열 정의]
mysql> ALTER TABLE sample62 CHANGE newcol c VARCHAR(20);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC sample62;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int         | NO   |     | NULL    |       |
| a     | varchar(30) | YES  |     | NULL    |       |
| b     | date        | YES  |     | NULL    |       |
| c     | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

열 삭제

ALTER TABLE 테이블명 DROP 열명
mysql> ALTER TABLE sample62 DROP c;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC sample62;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int         | NO   |     | NULL    |       |
| a     | varchar(30) | YES  |     | NULL    |       |
| b     | date        | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

0개의 댓글