Hướng dẫn drop database sql server 2023 năm 2024

Xóa nhanh tất cả dữ liệu trong một bảng Microsoft SQL Server bằng TRUNCATE

Thường chúng ta sẽ sử dụng câu lệnh DELETE để xóa dữ liệu, và xóa hết dữ liệu trong một bảng bằng câu lệnh có cú pháp "delete from table ".

Cách xóa này thường rất mất thời gian, nếu dữ liệu trong bảng nhiều.

Vậy có cách nào xóa nhanh hơn không?

Chúng ta có thể sử dụng câu lệnh TRUNCATE để xóa tất cả dữ liệu trong bảng với thời gian nhanh hơn nhiều so với sử dụng câu lệnh xóa thông thường.

Nhưng có một số vấn đề cần phải lưu ý khi thực hiện truncate dữ liệu của một bảng, đó là:

- Truncate sẽ xóa hết tất cả (lưu ý là "tất cả" nhé)

- Không truncate được khi bảng có khóa ngoại (trừ trường hợp khóa ngoại trong chính bảng cần xóa)

- Khi đã truncate rồi khi không có cửa để phục hồi lại như sử dụng lệnh delete đâu nha.

Hướng dẫn drop database sql server 2023 năm 2024

Cú pháp:

TRUNCATE TABLE

Một số sql script hữu ích sử dụng kèm:

1. Giảm dung lượng theo phần trăm

Cách này sẽ giảm kích thước của database (gồm cả file data và file log) xuống duy trì 10% free cho database:

DBCC SHRINKDATABASE (cosmotran_db, 10)

2. Giảm theo lượng dữ liệu

Giảm kích thước của database (cả file data lẫn file log) xuống, tùy chọn này có thể hiểu là xuống đến mức có bao nhiêu thì xuống tới đó luôn:

DBCC SHRINKDATABASE (cosmotran_db, TRUNCATEONLY)

3. Xem các constraint có trong bảng

Khi shrink thường gặp thông báo rằng còn khóa ngoại tồn tại, thường sẽ có thông báo cụ thể tên khóa, tên bảng liên quan. Hoặc ta có thể tìm thông tin đầy đủ của các ràng buộc (trong đó có khóa) của bảng bằng cách sử dụng script sau:

SELECT TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME

FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS

WHERE TABLE_NAME=''

4. Xóa constraint

Sau đó sử dụng script xóa constraint

ALTER TABLE

DROP CONSTRAINT

Ở đây, tên của ràng buộc là phần CONSTRAINT_NAME trong script 3.

5. Thông tin về dụng lượng file của database

Sau khi shrink database xong, có thể kiểm tra lại thông tin về dung lượng và các thông tin khác bằng srcipt sau đây:

SELECT file_id, name, type_desc, physical_name, size, max_size

FROM SYS.DATABASE_FILES

Việc xóa nhanh và sạch dữ liệu của bảng thường được thực hiện trong các nghiệp vụ làm giảm dung lượng của database bằng cách loại bỏ dữ liệu thừa, không cần thiết.

Một bước bắt buộc sau khi thực hiện xóa dữ liệu dư thừa là phải shrink lại database để giảm dung lượng của file xuống. Vì nếu không thực hiện, bộ nhớ vẫn dành một phần đúng như ban đầu cho database.

Ví dụ: Có file data 10GB, log 5GB. Sau khi dùng cách lệnh truncate, delete, drop.. thì dung lượng vẫn còn đó. Sau khi thực hiện shrink thì dung lượng file mới giảm xuống, như có thể còn data file 5GB, log file 100MB.

Trên đây là cách thực hiện các bước để giảm tải cho cơ sở dữ liệu MS SQL Server. Đồng thời cũng sẽ giúp giảm tải cho cả 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.

Mục lục

  • 1. Cú pháp lệnh DROP TABLE
  • 2. Các trường hợp thường gặp khi xóa table
    • Không tồn tại table cần xóa
    • Xóa table không có ràng buộc
    • Xóa table đang có khóa ngoại trỏ tới

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

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

1

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.

1

2

3

4

DROP TABLE `DROP TABLE`2

`DROP TABLE`3`DROP TABLE`4

`DROP TABLE`5`DROP TABLE`6

`DROP TABLE`3`DROP TABLE`8

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 TABLE`9 và `DROP`0 để 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 `DROP`1 nằm trong schema `DROP`2.

1

DROP TABLE `DROP`5

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:

1

2

3

4

5

DROP`6 `TABLE `DROP`8

`DROP`9`TABLE`0`TABLE`1 `TABLE`2 `TABLE`3`TABLE`4

DROP`9`TABLE`6`TABLE`7 `TABLE`8`TABLE`9 [IF EXISTS] [database_name.][schema_name.]table_name;`0`TABLE`4

DROP`9[IF EXISTS] [database_name.][schema_name.]table_name;3[IF EXISTS] [database_name.][schema_name.]table_name;4 `TABLE`9 [IF EXISTS] [database_name.][schema_name.]table_name;`0

`[IF EXISTS] [database_name.][schema_name.]table_name;`7

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

1

DROP TABLE `IF EXISTS`0

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:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

`DROP`6 `IF EXISTS`2 `IF EXISTS`3

`IF EXISTS`4

DROP`6 `TABLE `IF EXISTS`7

`DROP`9`IF EXISTS`9`TABLE`1 `database_name`1`TABLE`2 `TABLE`3`TABLE`4

DROP`9`database_name`6`TABLE`7 `database_name`8`TABLE`9 [IF EXISTS] [database_name.][schema_name.]table_name;`0

`[IF EXISTS] [database_name.][schema_name.]table_name;`7

DROP`6 `TABLE `schema_name`4

`DROP`9`schema_name`6`TABLE`1 `database_name`1`TABLE`2 `TABLE`3`TABLE`4

DROP`9`dbo`3`TABLE`7 `database_name`8`TABLE`9 [IF EXISTS] [database_name.][schema_name.]table_name;`0`TABLE`4

DROP`9`IF EXISTS`9`TABLE`1 `TABLE`9 [IF EXISTS] [database_name.][schema_name.]table_name;`0`TABLE`4

`DROP`9`table_name`6 `table_name`7`table_name`8 `TABLE`3 `DROP TABLE`00

`DROP`9`DROP TABLE`02 `DROP TABLE`03

`[IF EXISTS] [database_name.][schema_name.]table_name;`7

Bảng `DROP TABLE`05 là bảng cha, còn bảng `DROP TABLE`06 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:

1

2

`DROP TABLE`07

`DROP TABLE`08

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

1

2

3

4

DROP TABLE`09 `TABLE `DROP TABLE`11

DROP `table_name`6 `DROP TABLE`14

DROP TABLE `DROP TABLE`17

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.