# DDL(Data Definition Language)



클릭 몇번으로 테이블 만들고 컬럼 만드는 법을 배워봤는데

실은 SQL 코드로도 테이블과 컬럼을 만들 수 있습니다.&#x20;

내가 그냥 말단 직원이라면 테이블 생성보다는 테이블을 가져다쓰는 일만 많을 수 있겠지만&#x20;

나중엔 어떻게 될지 모르는 일 아니겠습니까.&#x20;

그래서 오늘은 SQL 문법으로 새로운 테이블과 컬럼만드는 법을 배워봅시다.&#x20;



DDL

데이터 정의어란? 데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어이다.

* create : 데이터베이스, 테이블등을 생성
* alter : 테이블을 수정
* drop : 데이터베이스, 테이블을 삭제
* truncate : 테이블을 초기화

※_SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어_\
※_데이터 베이스 관리자나 데이터베이스 설계자가 사용_





우리가 지금까지 배웠던 SELECT 문은

DML(Data Manipulation Language) 이라고 한다 .&#x20;



DML&#x20;

데이터 조작어란? 정의된 데이터베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할을 하는 언어.

* select : 데이터 조회
* insert : 데이터 삽입
* update : 데이터 수정
* delete : 데이터 삭제

※_데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는데 사용하는 언어_\
※_데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스를 제공_

\
**DCL(Data Control Language)**\
데이터베이스에 접근하거나 객체에 권한을 주는등의 역할을 하는 언어

* grant : 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한을 부여
* revoke : 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한을 **박탈, 회수**
* commit : 트랜잭션의 작업을 저장
* rollback : 트랜잭션의 작업을 **취소, 원래대로 복구**

\


**ROLL 객체**

※ROLE 종류\
CONNECT : DB 접속 권한\
RESOURCE : 테이블이라든지 인덱스라든지 생성할 수 있는 권한\
CREATE VIEW : 뷰 생성 권한\
DBA : 모든 권한(관리자)





### 테이블 생성

```sql
CREATE TABLE 테이블명 (
    컬럼1이름 datatype,
    컬럼2이름 datatype,
    컬럼3이름 datatype,
    ...등
); 
```

원하는 스키마에서 SQL 편집기 생성해서 이거 실행하면 됩니다.&#x20;

datatype 란엔 데이터타입을 정해서 넣어주면 됩니다.



```sql
CREATE TABLE TEST.NEWTABLE (
	ID NUMBER(38,0),
	나이 VARCHAR2(100),
	이름 NUMBER(38,0) 
);
```

사람정보를 저장하고 싶어서 이런 테이블을 만들어봤습니다.

실행하면 진짜 테이블 생깁니다. 안보이면 데이터베이스 우클릭해서 새로고침해보셈&#x20;

많이들 실수하는 포인트는 <mark style="color:yellow;">**마지막 줄에는 콤마 (,) 넣으면 안됩니다.**</mark>



```sql
CREATE TABLE TEST.NEWTABLE2 (
	ID NUMBER(38,0),
	나이 VARCHAR2(100) DEFAULT '홍길동',
	이름 NUMBER(38,0) 
);

```

컬럼만들 때 뒤에 DEFAULT 와 값을 입력하면

컬럼에 데이터가 안들어올 때 기본으로 채워줄 값을 설정가능합니다.

원래 데이터 안들어오면 NULL을 채워주는데 위의 경우엔 '홍길동'이 채워집니다.



### **테이블 삭제**



```sql
DROP TABLE 테이블명
```

실행하면 됩니다.&#x20;

삭제시 되돌릴 수 없습니다.&#x20;



### **컬럼 생성, 변경, 삭제**

```sql
ALTER TABLE 테이블명
ADD 컬럼명 VARCHAR(100); 

ALTER TABLE 테이블명
MODIFY 컬럼명 datatype; 

ALTER TABLE 테이블명
RENAME COLUMN 이전컬럼명 TO 바꿀컬럼명;

ALTER TABLE 테이블명
DROP COLUMN 컬럼명; 
```

&#x20;**컬럼 추가**

(참고) 컬럼추가시 이미 행들이 많이 있으면

새로운 컬럼에 들어갈 기본값은 NULL이 되는데

그거 말고 다른걸로 채우려면 위에서 했던 DEFAULT 문법도 한번 써보십시오.&#x20;



**컬럼의 데이터타입이 변경**

datatype 란에 NUMBER, VARCHAR() 등 아무거나 넣을 수 있습니다.&#x20;

하지만 이미 컬럼에 '가나다' 이런 문자가 있는 경우엔 NUMBER 타입으로 변경하는건 불가능합니다.&#x20;

&#x20;

이런 식으로 컬럼을 한 번 만들어 놓으면 변경이 불가능할 때가 많아서&#x20;

변경이 필요하면 새로 테이블 만들어서 데이터를 옮기는 식으로 하거나 그런 경우들이 있습니다.&#x20;

그래서 처음 만들 때 잘 만들어둡시다. &#x20;



**컬럼 명 변경**

위 방식으로 할 수 있는데 서비스중인 시스템이라면 문제가 발생할 확률이 높아서 잘 사용하지는 않습니다.

개발단계에서는 사용 할 수도 있습니다.



**컬럼 삭제**

위 방식으로 컬럼 삭제도 가능





(참고)

\- 항상 상상한 것 보다 더 큰 문자나 숫자가 들어올 수 있으므로 글자 수 제한은 넉넉하게 잡읍시다.



&#x20;

<mark style="color:red;">**☄️이번만큼은 클릭 말고 DDL로 직접 작성해봅시다.**</mark>&#x20;

**Q1. 유저 이름, 전화번호를 저장할 테이블 member를 만들어봅시다.**&#x20;

**Q2. 방금 만든 테이블에 '나이'를 저장할 컬럼을 추가해봅시다.**&#x20;

**Q3. 부끄러우니까 방금 만든 테이블을 삭제해봅시다.**&#x20;

