Backend/MySQL

[MySQL] DROP 명령어는 어떻게 테이블을 통채로 날릴까?

동구름이 2024. 11. 12. 14:51

MySQL의 명령어를 공부해본 사람이라면, DROP과 TRUNCATE, DELETE 명령어의 차이를 들어보았을 것이다.

 

 

https://wikidocs.net/4021

간단하게 이야기를 하자면, DELETE 명령어는 원하는 데이터를 지울 수 있고, 삭제 후 잘못 삭제한 것을 되돌릴 수 있다.

 

TRUNCATE 명령어는 테이블은 삭제하지는 않고, 데이터만 삭제한다. 삭제 후 절대 되돌릴 수 없다.

 

DROP 명령어는 테이블 전체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.

 

 

 

그럼 DROP 명령어는 어떻게 작동하길래, 테이블이 통채로 사라질까?

MySQL의 innoDB에서는 테이블을 .ibd 파일로 저장한다.

 

 

DROP시 .ibd 파일이 어떻게 되는지 살펴보자.

mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO test_table (id, name) VALUES (1, 'example');
Query OK, 1 row affected (0.01 sec)

 

가상의 test_db를 만들고 테이블을 생성한 뒤 값을 삽입했다.

 

 

우선 TRUNCATE 이후 .ibd 파일이 존재하는지 살펴보자.

mysql> TRUNCATE TABLE test_table;
Query OK, 0 rows affected (0.01 sec)

$ ls -l {---}/mysql/data/test_db/test_table.ibd
-rw-r----- 1 mysql mysql 98304 Nov 12 12:00 /usr/local/mysql/data/test_db/test_table.ibd

TRUNCATE 명령어는 .ibd 파일이 그대로 존재한다.

 

 

 

DROP 명령어 이후 .ibd 파일이 존재하는지 살펴보면,

mysql> DROP TABLE test_table;
Query OK, 0 rows affected (0.01 sec)

$ ls -l {---}/mysql/data/test_db/test_table.ibd
ls: /usr/local/mysql/data/test_db/test_table.ibd: No such file or directory

.ibd 파일이 삭제된 것을 알 수 있다.

 

 

 

DROP 명령어는 .ibd 파일이 삭제해 테이블을 통채로 날리는 것을 알 수 있다.