Xóa bảng với lệnh Drop Table trong SQL Server
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;
Bài viết này được đăng tại [free tuts .net]
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 địnhdbo
.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 và Stored Procedure thì bạn phải sử dụng lệnh DROP VIEW
và DROP 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.