[MySQL]DDL

2019. 3. 5. 15:16DataBase

DDL(Data Definition Language)


이전에는 DML 이라는 데이터 조작어를 사용했었는데 조작하려면 뭔가 데이터의 골격이 있어야합니다.

 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어로 데이터 구조(table/이나 DB)를 생성/변경/삭제/변경과 관련된 일을 하는 게 바로 데이터 정의어인 DDL입니다.


MySQL 데이터 타입

CREATE(테이블 생성)

CREATE TABLE 테이블이름 ( 
 필드이름1 타입 [ null | not null ] [ default ] [ auto_increment ],
 필드이름2 타입 [ null | not null ] [ default ] [ auto_increment ],
 필드이름3 타입 [ null | not null ] [ default ] [ auto_increment ],
  .......
 PRIMARY KEY(필드명)
)

mysql> create table employee( -> empno integer not null primary key, -> name varchar(10), -> job varchar(9), -> boss integer, -> hiredate varchar(12), -> salary decimal(7,2), -> comm decimal(7,2), -> deptno integer ); Query OK, 0 rows affected (0.64 sec)

// desc 는 describe로 테이블을 설명하줍니다.

mysql> desc employee; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | empno | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | NULL | | | job | varchar(9) | YES | | NULL | | | boss | int(11) | YES | | NULL | | | hiredate | varchar(12) | YES | | NULL | | | salary | decimal(7,2) | YES | | NULL | | | comm | decimal(7,2) | YES | | NULL | | | deptno | int(11) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 8 rows in set (0.36 sec)


ALERT(테이블 수정)

컬럼추가
alter table 테이블명
add 필드명 타입 [ null | not null ] [ default ] [ auto_increment ];

컬럼삭제
alter table 테이블명
drop 필드명;

컬럼이름변경
alter table 테이블명
change 현재필드명 바꿀필드명;

테이블명 변경
alter table 현재테이블
rename 바꿀테이블명;

mysql> ALTER TABLE employee ADD birthday varchar(12); Query OK, 0 rows affected (0.54 sec) Records: 0 Duplicates: 0 Warnings: 0

mysql> desc employee; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | empno | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | NULL | | | job | varchar(9) | YES | | NULL | | | boss | int(11) | YES | | NULL | | | hiredate | varchar(12) | YES | | NULL | | | salary | decimal(7,2) | YES | | NULL | | | comm | decimal(7,2) | YES | | NULL | | | deptno | int(11) | YES | | NULL | | | birthday | varchar(12) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 9 rows in set (0.00 sec)

mysql> ALTER TABLE employee DROP birthday; Query OK, 0 rows affected (0.10 sec) Records: 0 Duplicates: 0 Warnings: 0

mysql> desc employee; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | empno | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | NULL | | | job | varchar(9) | YES | | NULL | | | boss | int(11) | YES | | NULL | | | hiredate | varchar(12) | YES | | NULL | | | salary | decimal(7,2) | YES | | NULL | | | comm | decimal(7,2) | YES | | NULL | | | deptno | int(11) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 8 rows in set (0.00 sec)

mysql> ALTER TABLE employee CHANGE deptno dep_no int(8); // 부서번호 deptno을 dep_no로 변경. CHANGE이용 Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc employee; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | empno | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | NULL | | | job | varchar(9) | YES | | NULL | | | boss | int(11) | YES | | NULL | | | hiredate | varchar(12) | YES | | NULL | | | salary | decimal(7,2) | YES | | NULL | | | comm | decimal(7,2) | YES | | NULL | | | dep_no | int(8) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 8 rows in set (0.01 sec)

mysql> ALTER TABLE products RENAME officeEquipment; Query OK, 0 rows affected (0.53 sec) mysql> show tables; +-------------------+ | Tables_in_classdb | +-------------------+ | employee | | officeequipment | +-------------------+ 2 rows in set (0.02 sec)


DROP(테이블 삭제)

테이블 삭제

drop table 테이블명;

mysql> show tables; +-------------------+ | Tables_in_classdb | +-------------------+ | employee | | officeequipment | +-------------------+ 2 rows in set (0.02 sec) mysql> drop table employee; Query OK, 0 rows affected (0.03 sec) mysql> desc employee; ERROR 1146 (42S02): Table 'classdb.employee' doesn't exist

drop 테이블 후 desc 테이블을 수행해보니, 존재하지 않는 테이블이라고 명시되는 걸 볼 수 있습니다.
참고로, 제약 조건이 있을 경우에 drop table로 테이블 삭제가 수행되지 않을 수 있습니다. 그럴 경우는 테이블 생성한 반대 순서로 삭제해야 합니다.


[ edwith - 웹프로그래밍 부스트코스 ] 를 개인적으로 공부하고 정리한 공간입니다. 잘못된 부분은 피드백 주시면 감사하겠습니다



'DataBase' 카테고리의 다른 글

[MySQL] DML  (0) 2019.03.04
[MySQL] SQL  (0) 2019.03.04
[MySQL] DB vs DBMS  (0) 2019.03.02