3 min read

SQL 첫걸음 6장

25강: 데이터베이스 객체

1. 데이테베이스 객체

데이터베이스 객체란 테이블이나 뷰, 인덱스 등 데이터베이스 내에 정의하는 모든 것을 일컫는 말이다. 객체는 데이터베이스 내에 실체를 가지는 어떤 것을 말한다. 객체의 종류에 따라 데이터베이스에 저장되는 내용도 달라진다. 객체에 해당하는 것은 테이블이다. SQL 명령은 데이터베이스 내에 존재하지 않기 때문에 객체라고 할 수 없다. 객체는 이름을 가지고 있다. 데이터베이스 내에서 객체를 작성할 때 이름이 겹치지 않도록 하는 것이 좋다. 테이블의 열 또한 이름을 가지고 있다. SELECT 명령에서 열에 별명을 붙일 수도 있다. 하지만 열이나 별명은 객체가 아니다. 한 가지 동일한 점은 이름을 붙일 때 임의의 규칙에 맞게 지정해야 한다는 것이다.

이름을 지정할 때는 몇가지 제약사항이 있다.

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

객체의 이름은 꽤 중요하기 때문에, 의미없는 이름은 붙이지 않도록 해야한다. 이름은 객체의 종류와는 관계가 없다는 것도 주의해야한다.

2. 스키마

데이터베이스 객체는 스키마라는 그릇 안에 만들어진다. 따라서 객체의 이름이 같아도 스키마가 서로 다르면 상관없다. 이와 같은 특징 때문에 데이터베이스 객체를 ‘스키마 객체’라고도 불린다. 데이터베이스에 테이블을 작성해서 구축해나가는 작업을 ‘스키마 설계’라고 부른다. 스키마는 SQL 명령의 DDL을 이용해서 정의한다. 어떤 것이 스키마가 되는지는 데이터베이스 제품마다 다르다. MySQL에서는 CREATE DATABASE 명령으로 작성한 ‘데이터베이스’가 스키마가 된다. Oracle이나 다른 데이터베이스 제품에서는 데이터베이스와 데이터베이스 사용자가 계층적 스키마가 된다. 테이블과 스키마는 무엇을 담는 그릇 역할을 한다는 점에서 비슷하다. 테이블 안에는 열을 정의할 수 있고 스키마 안에는 테이블을 정의할 수 있다. 각각의 그릇 안에서는 중복하지 않도록 이름을 지정한다. 이처럼 이름이 충돌하지 않도록 기능하는 그릇을 ‘네임스페이스’라고 부른다.

26강: 테이블 작성, 삭제, 변경

5장까지 배운 내용은 SQL 명령중에서 DML에 속하고, 데이터를 정의하는 명령으로, 스키마 내의 객체를 관리하는 명령은 DDL에 속한다.

1. 테이블 작성

DDL은 모두 같은 문법을 사용한다. CREATE로 작성, DROP으로 삭제, ALTER로 변경할 수 있다. 뒤이어 어떤 종류의 객체를 작성, 삭제, 변경할지를 지정한다. 예를 들면 테이블을 작성한다면 CREATE TABLE, 뷰를 작성하고 싶다면 CREATE VIEW와 같이 지정해주면 된다.

CREATE TABLE 테이블명(
열 정의1,
열 정의2,
...
)

열 정의는 밑의 형식으로 작성해줘야한다.

열 정의:
열명 자료형 [DEFAULT 기본값] [NULL|NOT NULL]

위의 형식은 밑의 예제처럼 사용하면 된다.

EX)
CREATE TABLE SAMPLE(
  NO INTEGER NOT NULL,
  A VARCHAR(30),
  B DATE);

2. 테이블 삭제

DROP TABLE 테이블명

이 명령에서 지정하는 것은 테이블 뿐이다. 많은 데이터베이스 제품에서는 SQL 명령을 실행할 때 확인을 요구하지 않는다. 따라서 이 명령을 실행할 때 신중해야한다.

  • 데이터 행 삭제

테이블 정의는 그대로 둔 채 데이터만 삭제할 때는 DELETE 명령을 사용한다. 이때 WHERE 조건을 지정하지 않으면 테이블의 모든 행을 삭제한다. DELETE 명령은 행 단위로 여러가지 내부처리가 일어나므로 삭제할 행이 많으면 처리속도가 상당히 느려진다. 이럴때는 DDL로 분류된 TRUNCATE TABLE 명령을 사용한다. 행을 지정할 순 없지만, 모든 행을 삭제할 때 빠른 속도로 삭제할 수 있다.

TRUNCATE TABLE 테이블명

3. 테이블 변경

ALTER TABLE 테이블명 변경명령

이 명령을 실행시키면 기존에 있던 데이터는 그대로 있고 구성만 변경할 수 있다. 이 명령으로 할 수 있는 일은 크게 두가지로 분류된다. - 열 추가, 삭제, 변경 - 제약 추가, 삭제

  • 열 추가
ALTER TABLE 테이블명 ADD 열 정의

ADD 하부명령으로 열을 추가할 수 있다.

EX)
ALTER TABLE SAMPLE ADD NEWCOL INTEGER;

NOT NULL 제약이 걸린 열을 추가할 때는 기본값을 지정해야 한다.

  • 열 속성 변경
ALTER TABLE 테이블명 MODIFY 열 정의

MODIFY 하부명령으로 열 속성을 변경할 수 있다.

EX)
ALTER TABLE SAMPLE MODIFY NEWCOL VARCHAR(20;
  • 열 이름 변경
ALTER TABLE 테이블명 CHANGE [기존 열 이름] [신규 열 이름]

CHANGE 하부명령으로 열 이름을 변경한다. Oracle에서는 RENAME TO라는 하부명령을 사용한다.

EX)
ALTER TABLE SAMPLE CHANGE NEWCOL C VARCHAR(20);
  • 열 삭제
ALTER TABLE 테이블명 DROP 열명

DROP 하부명령으로 열을 삭제한다.

EX)
ALTER TABLE SAMPLE DROP C;