06/04/2021, 14:50

Xóa bảng với lệnh Drop Table trong SQL Server - SQL Server căn bản

Trong bài này mình sẽ hướng dẫn bạn cách sử dụng lệnh DROP TABLE để xóa một hoặc nhiều table trong SQL Server. Đôi khi trong quá trình tạo dữ liệu bạn tạo dư thì có thể sử dụng DROP TABLE để xóa, lệnh này ít khi sử dụng, tuy nhiên bạn nên tìm hiểu vì có nhiều vấn đề liên quan. ...

Trong bài này mình sẽ hướng dẫn bạn cách sử dụng lệnh DROP TABLE để xóa một hoặc nhiều table trong SQL Server.

Đôi khi trong quá trình tạo dữ liệu bạn tạo dư thì có thể sử dụng DROP TABLE để xóa, lệnh này ít khi sử dụng, tuy nhiên bạn nên tìm hiểu vì có nhiều vấn đề liên quan.

1. Cú pháp lệnh DROP TABLE

Trước tiên bạn hãy xem cú pháp sau:

DROP TABLE [IF EXISTS]  [database_name.][schema_name.]table_name;

Trong đó:

  • IF EXISTS có thể dùng hoặc không, nếu có thì sẽ không bị lỗi nếu table cần xóa không tồn tại.
  • database_name là tên database, có thể dùng hoặc không, nếu không thì sẽ xóa table ở database hiện tại.
  • schema_name là tên schema, có thể dùng hoặc không, nếu không thì sẽ là schema mặc định dbo.
  • table_name là tên table cần xóa

Để xóa nhiều bảng thì chỉ việc ngăn cách tên các table bằng dẩy phẩy.

DROP TABLE [database_name.][schema_name.]table_name_1,
             [database_name.][schema_name.]table_name_2,
                  ...
             [database_name.][schema_name.]table_name_n;

Lưu ý: Khi xóa table thì SQL Server sẽ xóa toàn bộ dữ liệu, khóa ngoại, trigger, permision liên quan đến table đó. Tuy nhiên với View Stored Procedure thì bạn phải sử dụng lệnh DROP VIEWDROP PROCEDURE để xóa.

2. Các trường hợp thường gặp khi xóa table

Bây giờ chúng ta cùng tìm hiểu những trường hợp thường xóa table thường thấy trong thực tế và các lưu ý kèm theo nhé.

Không tồn tại table cần xóa

Ví dụ dưới đây sẽ xóa table revenues nằm trong schema sales.

DROP TABLE IF EXISTS sales.revenues;

Lệnh này chạy sẽ không bao giờ lỗi vì nó sẽ kiểm tra table cần xóa có tồn tại không, nếu tồn tại thì xóa, không thì trả về kết quả là không xóa table nào cả.

Xóa table không có ràng buộc

Trường hợp này bạn thực hiện bình thường. Giả sử ta có table sau:

CREATE TABLE sales.delivery (
    delivery_id INT PRIMARY KEY,
    delivery_note VARCHAR (255) NOT NULL,
    delivery_date DATE NOT NULL
);

Mình sẽ xóa table này bằng lệnh sau:

DROP TABLE sales.delivery;

Xóa table đang có khóa ngoại trỏ tới

Trường hợp đang có một table nào đó liên kết khóa ngoại với table cần xóa thì bạn phải xóa khóa ngoại trước rồi mới xóa table.

Giả sử mình có hai table sau:

CREATE SCHEMA procurment;
GO
 
CREATE TABLE procurment.supplier_groups (
    group_id INT IDENTITY PRIMARY KEY,
    group_name VARCHAR (50) NOT NULL
);
 
CREATE TABLE procurment.suppliers (
    supplier_id INT IDENTITY PRIMARY KEY,
    supplier_name VARCHAR (50) NOT NULL,
    group_id INT NOT NULL,
    CONSTRAINT fk_name FOREIGN KEY (group_id) 
    REFERENCES procurement.supplier_groups (group_id)
);

Bảng supplier_groups là bảng cha, còn bảng suppliers là bảng con nên khi thực hiện xóa bảng cha ta phải xóa ràng buộc khóa ngoại giữa chúng, còn nếu bạn xóa bảng con thì không cần làm gì cả. Nếu bạn cố tình xóa bảng cha mà không xóa khóa ngoại thì sẽ gặp lỗi như sau:

Could not drop object 'procurement.supplier_groups' 
because it is referenced by a FOREIGN KEY constraint.

Tóm lại các bước thực hiện như sau:

ALTER TABLE Orders
DROP CONSTRAINT fk_name;

DROP TABLE procurement.supplier_groups;

Nếu bạn xóa cả hai bảng thì nên đặt bảng con trước bảng cha thì lúc này ta không cần phải xóa ràng buộc khóa ngoại.

DROP TABLE procurement.suppliers, procurement.supplier_groups;

Trên là cách sử dụng lệnh DROP TABLE để xóa table ra khỏi database trong SQL Server.

Hoàng Hải Đăng

24 chủ đề

7226 bài viết

Cùng chủ đề
0