본문 바로가기
Database/MariaDB

MariaDB : DDL(Data Definition Language)에 대해서

by 코딩쥐 2024. 10. 16.

DDL은 Data Definition Language의 약자로, 데이터베이스의 구조를 관리하는데 사용되는 SQL 명령어의 집합니다. DDL을 사용하여 테이블, 뷰(SELECT문의 결과를 담고 있는 가상의 테이블), 인덱스 등의 데이터베이스 객체를 생성, 수정, 삭제할 수 있다. 

  • CREATE : 새로운 데이터베이스 객체를 생성한다.
  • ALTER : 기존 객체의 구조를 변경한다. (ADD, MODIFY, DROP)
  • TRUNCATE : 테이블의 구조는 유지한 채 모든 데이터를 삭제한다.
  • RENAME : 데이터베이스 객체의 이름을 변경한다.

 

CREATE

  • CREATE 데이터베이스객체 객체명(
       첫번째열 데이터타입,
        n번째열 데이터타입) ; 
CREATE DATABASE USERS; 

# 어떤 스키마를 사용할 건지 작성 
USE USERS; 

# user 라는 이름의 테이블 생성
CREATE TABLE USER(
   # VARCHAR타입의 10길이의 UNAME 생성
	UNAME VARCHAR(10), 
	# INT타입의 11 길이의 UAGE생성
	UAGE INT(11),
	# VARCHAR타입의 10길이의 UGENDER 생성
	UGENDER VARCHAR(10)
);

 

users라는 데이터 베이스에 uname, uage,ugender이라는 열을 가진 테이블이 생성된 모습을 볼 수 있다.

 

만약에 다른 데이터베이스의 테이블에서 데이터를 가져와서 데이터를 생성할 때는 아래와 같이 사용하면 된다. 

  • CREATE TABLE 테이블명 AS
    SELECT 가져올항목 FROM 다른데이터베이스.기존테이블명;
# 같은 데이터베이스에 있으면 테이블 명만 작성
CREATE TABLE usercopy
AS
SELECT * FROM empcopy;

# ename 만 empcopy에서 가져와서 테이블 생성
CREATE TABLE username
AS
SELECT ename FROM empcopy;

 

INNER JOIN을 통해서 두 개의 테이블에서 합친 데이터를 가지고 올 때는 다음과 같이 사용한다. 

# empcopy와 userloc 이름을 기준으로 데이터를 합친 테이블 생성
CREATE TABLE usertotal
AS
SELECT e.ename, e.gender, e.age, u.uloc FROM empcopy e
INNER JOIN userloc u 
ON e.ename = u.uname;

 

만약 테이블 데이터는 가져오고 싶지 않은데, 테이블의 구조는 동일한 복사본을 원할 경우에는 다음과 같이 사용한다. 

# usertotal의 테이블 구조만 복사 
CREATE TABLE usertotal1015
AS
SELECT * FROM usertotal WHERE 1=0;

 

데이터는 존재하지 않고 테이블만 생성된 모습을 볼 수 있다.

 

ALERT

기존의 테이블의 구조를 변경하기 위한 명령문으로, 칼럼의 새로운 칼럼을 추가(ADD)하고, 기존 칼럼을 수정(MODIFY)하고 기존 칼럼을 삭제(DROP)할 때 사용한다. 

 

ADD : 새로운 칼럼 추가

  • ALTER TABLE 테이블명 ADD 칼럼명 데이터타입;
# usertotal에 tel 칼럼 추가
ALTER TABLE usertotal ADD tel INT;

 

MODIFY : 기존 칼럼 수정

  • ALTER TABLE 테이블명 MODIFY 칼럼명 새로운_데이터타입;
# usertotal에 ename의 데이터 길이를 30으로 변경
ALTER TABLE usertotal MODIFY ename VARCHAR(30);

 

DROP : 칼럼 삭제

  • ALTER TABLE 테이블명 DROP 칼럼명;
# usertotal에 tel 칼럼 삭제
ALTER TABLE usertotal DROP tel;

 

칼럼을 수정하거나 삭제할 때는 해당 칼럼의 데이터 무결성을 해치지 않는 범위 내에서만 시행된다. MODIFY를 통해 해당 열의 데이터 타입 길이를 줄일 때 기존의 데이터가 새로운 길이를 초과하면 해당 DDL 명령어는 실행되지 않는다. 

 

TRUNCATE

테이블의 구조는 유지한 채 모든 데이터를 초기화 한다. 삭제된 데이터는 복구가 되지 않기 때문에 샤용에 유의해야 한다.

  • TRUNCATE TABLE 테이블명;

 

RENAME

데이터베이스 객체(예: 테이블, 열)의 이름을 변경할 때 사용한다.

  • RENAME TABLE 기존테이블명 TO 새로운테이블명;
# usertotal을 userinfo로 변경
RENAME TABLE usertotal TO userinfo;