Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL DROP TABLE은 테이블을 완전히 삭제할까? TRUNCATE TABLE과의 차이점 완벽 정리

MySQL DROP TABLE과 TRUNCATE TABLE의 차이

MySQL에서 DROP TABLE 명령어는 테이블을 완전히 제거하며, 테이블에 저장된 모든 데이터까지 함께 삭제합니다. 반면, 데이터는 모두 지우되 테이블 구조는 그대로 유지하고 싶다면 TRUNCATE TABLE 명령어를 사용하는 것이 좋습니다. TRUNCATE는 테이블의 데이터를 비운 후 테이블 구조를 다시 생성합니다.

DROP TABLE 예제

먼저 DROP TABLE의 동작을 확인해 보겠습니다. 우선 테이블을 생성합니다.

mysql> create table DemoTable
    (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name varchar(20)
    );
Query OK, 0 rows affected (0.20 sec)

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable(Name) values('Larry');
Query OK, 1 row affected (0.07 sec)

mysql> insert into DemoTable(Name) values('Chris');
Query OK, 1 row affected (0.05 sec)

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Larry |
| 2  | Chris |
+----+-------+
2 rows in set (0.00 sec)

이제 DROP TABLE 명령어를 실행해 보겠습니다. DROP TABLE이 실행되면 데이터가 삭제될 뿐만 아니라 테이블 구조 자체도 더 이상 존재하지 않게 됩니다.

mysql> DROP TABLE DemoTable;
Query OK, 0 rows affected (0.18 sec)

이후 데이터를 조회하려고 하면 다음과 같은 오류가 발생합니다.

mysql> select *from DemoTable;
ERROR 1146 (42S02): Table 'hb_student_tracker.DemoTable' doesn't exist

DESC 명령으로 테이블 구조를 확인하려고 해도 마찬가지로 오류가 발생합니다.

mysql> desc DemoTable;
ERROR 1146 (42S02): Table 'hb_student_tracker.DemoTable' doesn't exist

TRUNCATE TABLE 예제

이번에는 TRUNCATE 명령어를 살펴보겠습니다. 먼저 새로운 테이블을 생성합니다.

mysql> create table DemoTable
   (
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(20)
   );
Query OK, 0 rows affected (0.63 sec)

테이블에 레코드를 삽입합니다.

mysql> insert into DemoTable(FirstName) values('Chris');
Query OK, 1 row affected (0.08 sec)

mysql> insert into DemoTable(FirstName) values('Robert');
Query OK, 1 row affected (0.07 sec)

SELECT 문으로 전체 레코드를 확인합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 2  | Robert    |
+----+-----------+
2 rows in set (0.00 sec)

이제 TRUNCATE 명령어를 실행합니다. TRUNCATE 실행 후에는 테이블의 데이터가 모두 제거되지만, 테이블 구조는 그대로 유지(재생성)됩니다.

mysql> TRUNCATE TABLE DemoTable;
Query OK, 0 rows affected (0.06 sec)

TRUNCATE 이후에는 테이블에서 어떤 데이터도 조회되지 않습니다.

mysql> select *from DemoTable;
Empty set (0.00 sec)

하지만 아래 쿼리처럼 테이블 구조는 여전히 확인할 수 있습니다.

mysql> desc DemoTable;

결괏값은 다음과 같습니다.

+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| Id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| FirstName | varchar(20) | YES  |     | NULL    |               |
+-----------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

정리

DROP TABLE은 테이블의 데이터와 구조를 모두 완전히 삭제하는 반면, TRUNCATE TABLE은 데이터만 삭제하고 테이블 구조는 유지합니다. 테이블 자체가 더 이상 필요 없다면 DROP TABLE을, 데이터만 초기화하고 구조를 유지하고 싶다면 TRUNCATE TABLE을 사용하는 것이 바람직합니다.