Câu lệnh DROP TABLE trong MySQL được sử dụng để xóa hoàn toàn một hoặc nhiều bảng từ cơ sở dữ liệu. Khi bảng bị xóa, tất cả dữ liệu bên trong bảng cũng sẽ bị xóa vĩnh viễn, và không thể khôi phục được trừ khi có sao lưu dữ liệu.

Trong hướng dẫn này, chúng ta sẽ đi qua chi tiết, cụ thể và tỉ mỉ về câu lệnh DROP TABLE, từ những minh họa cơ bản đến những ví dụ nâng cao.


1. Xóa một bảng duy nhất

Cú pháp:

DROP TABLE table_name;

Ví dụ:

Xóa bảng employees khỏi cơ sở dữ liệu:

DROP TABLE employees;

Sau khi thực hiện câu lệnh trên, bảng employees cùng với toàn bộ dữ liệu của nó sẽ bị xóa hoàn toàn khỏi cơ sở dữ liệu.


2. Xóa nhiều bảng cùng lúc

MySQL cho phép bạn xóa nhiều bảng cùng lúc bằng cách liệt kê tên các bảng, cách nhau bằng dấu phẩy.

Cú pháp:

DROP TABLE table1, table2, table3;

Ví dụ:

Xóa các bảng employees, departments, và projects cùng lúc:

DROP TABLE employees, departments, projects;

Tất cả ba bảng trên sẽ bị xóa khỏi cơ sở dữ liệu sau khi câu lệnh này được thực thi.


3. Xóa bảng nếu tồn tại

Trong một số trường hợp, bảng có thể đã bị xóa trước đó, và việc cố gắng xóa lại sẽ gây ra lỗi. Để tránh lỗi này, bạn có thể sử dụng từ khóa IF EXISTS, giúp chỉ xóa bảng nếu bảng đó tồn tại.

Cú pháp:

DROP TABLE IF EXISTS table_name;

Ví dụ:

Xóa bảng employees chỉ khi nó tồn tại trong cơ sở dữ liệu:

DROP TABLE IF EXISTS employees;

Nếu bảng employees không tồn tại, MySQL sẽ không báo lỗi mà chỉ đưa ra một cảnh báo.


4. Xóa bảng cùng với ràng buộc liên quan

Khi bạn xóa một bảng có các khóa ngoại (FOREIGN KEY) hoặc các mối liên hệ với các bảng khác, bạn cần phải chắc chắn rằng các ràng buộc đó đã được xử lý đúng cách. Thông thường, bạn sẽ cần xóa các khóa ngoại trước khi xóa bảng.

Ví dụ:

Giả sử bảng employees có một khóa ngoại tham chiếu đến bảng departments, bạn cần xóa khóa ngoại này trước khi xóa bảng:

ALTER TABLE employees
DROP FOREIGN KEY fk_department;

Sau đó, bạn có thể xóa bảng employees:

DROP TABLE employees;


5. Xóa bảng liên kết với TEMPORARY TABLE

TEMPORARY TABLE là bảng tạm thời, chỉ tồn tại trong suốt thời gian của phiên làm việc MySQL và sẽ tự động bị xóa khi phiên kết thúc. Tuy nhiên, bạn có thể xóa các bảng tạm thời bằng câu lệnh DROP TABLE.

Cú pháp:

DROP TEMPORARY TABLE table_name;

Ví dụ:

Xóa bảng tạm thời temp_employees:

DROP TEMPORARY TABLE temp_employees;

Nếu bảng này không phải là bảng tạm thời, bạn sẽ gặp lỗi. Vì vậy, hãy đảm bảo bảng cần xóa là bảng tạm thời.


6. Xóa bảng liên kết với khóa ngoại CASCADE

Trong trường hợp bảng bạn muốn xóa có liên kết với các bảng khác thông qua các khóa ngoại, bạn có thể xóa bảng và tất cả các bản ghi liên quan bằng cách sử dụng ON DELETE CASCADE khi thiết lập khóa ngoại.

Ví dụ:

Giả sử bạn có bảng employees với khóa ngoại department_id tham chiếu đến bảng departments. Khi xóa một bảng có khóa ngoại mà không dùng CASCADE, bạn sẽ gặp lỗi nếu các bản ghi liên quan vẫn còn. Để tránh điều này, khi tạo bảng, bạn có thể dùng tùy chọn ON DELETE CASCADE:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE CASCADE
);

Với cấu trúc trên, khi xóa bảng departments, các bản ghi trong employees liên quan đến department_id sẽ tự động bị xóa:

DROP TABLE departments;


7. Sử dụng RESTRICT khi xóa bảng có khóa ngoại

Tùy chọn RESTRICT ngăn cản việc xóa một bảng nếu có bất kỳ bảng nào khác đang tham chiếu đến nó qua khóa ngoại.

Ví dụ:

Nếu bảng employees có khóa ngoại department_id tham chiếu đến bảng departments, và bạn cố gắng xóa bảng departments mà không xóa các bản ghi trong employees trước, tùy chọn RESTRICT sẽ ngăn cản việc xóa bảng:

ALTER TABLE employees
ADD CONSTRAINT fk_department FOREIGN KEY (department_id)
REFERENCES departments(department_id) ON DELETE RESTRICT;

Sau khi thêm ràng buộc này, nếu bạn cố gắng xóa bảng departments, MySQL sẽ từ chối lệnh nếu vẫn còn các bản ghi tham chiếu đến bảng đó.

DROP TABLE departments;

Kết quả: lệnh sẽ không được thực thi nếu có các bản ghi trong bảng employees phụ thuộc vào department_id trong departments.


8. Xóa bảng và giải phóng tài nguyên ngay lập tức

Khi bảng bị xóa, không gian lưu trữ đã được sử dụng bởi bảng đó sẽ được giải phóng. Tuy nhiên, có những lúc bạn muốn kiểm soát việc giải phóng không gian đĩa ngay lập tức sau khi xóa bảng, đặc biệt khi làm việc với hệ thống lưu trữ lớn.

Cú pháp:

DROP TABLE table_name PURGE;

Ví dụ:

Xóa bảng employees và giải phóng toàn bộ tài nguyên của nó ngay lập tức:

DROP TABLE employees PURGE;


9. Xóa bảng với phân vùng dữ liệu (PARTITIONS)

Nếu bạn sử dụng phân vùng để quản lý dữ liệu lớn, bạn có thể xóa một hoặc nhiều phân vùng thay vì xóa toàn bộ bảng.

Ví dụ:

Giả sử bảng sales được phân vùng theo năm, và bạn muốn xóa phân vùng dữ liệu của năm 2020:

ALTER TABLE sales
DROP PARTITION p2020;

Hoặc xóa toàn bộ bảng bao gồm cả phân vùng:

DROP TABLE sales;


10. Xóa bảng được liên kết với VIEW

MySQL hỗ trợ khái niệm VIEW (khung nhìn), giúp tạo các bảng ảo dựa trên kết quả của các truy vấn SELECT. Tuy nhiên, nếu bạn xóa bảng gốc mà một VIEW dựa vào, VIEW đó sẽ không còn hoạt động.

Ví dụ:

Giả sử bạn có một VIEWemployee_view dựa trên bảng employees:

CREATE VIEW employee_view AS
SELECT id, name FROM employees;

Nếu bạn xóa bảng employees:

DROP TABLE employees;

employee_view sẽ không hoạt động nữa và bạn sẽ nhận được lỗi nếu cố truy vấn VIEW đó. Để tránh lỗi này, bạn nên xóa VIEW trước khi xóa bảng gốc.

DROP VIEW employee_view;


Những ví dụ trên cung cấp đầy đủ các trường hợp sử dụng từ cơ bản đến nâng cao của câu lệnh DROP TABLE trong MySQL. Khi sử dụng câu lệnh này, bạn cần hết sức cẩn thận vì dữ liệu sẽ bị xóa vĩnh viễn và không thể khôi phục được trừ khi bạn có bản sao lưu.