Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

SQL DROP TABLE cho người mới bắt đầu

Trong SQL, nếu bạn muốn xóa một bảng khỏi cơ sở dữ liệu, bạn cần sử dụng DROP TABLE tuyên bố.

Điều đó sẽ phá hủy bảng và tất cả dữ liệu của nó.

Cú pháp

Cú pháp chuẩn của SQL như sau:

DROP TABLE <table name> <drop behavior>

Ở đâu:

  • <table name> là tên của bảng mà bạn muốn thả xuống.
  • <drop behavior> chỉ định bất kỳ tùy chọn nào. Đây có thể là CASCADE hoặc RESTRICT .

Một số RDBMS cũng chấp nhận IF EXISTS tùy chọn có nghĩa là nó sẽ không trả về lỗi nếu bảng không tồn tại.

Một số RDBMS (chẳng hạn như MySQL và MariaDB) cũng chấp nhận TEMPORARY tùy chọn từ khóa để đảm bảo chỉ các bảng tạm thời bị loại bỏ.

Oracle cũng chấp nhận PURGE mệnh đề này sẽ xóa nó khỏi thùng rác.

Ví dụ

Đây là một ví dụ để chứng minh.

DROP TABLE t1;

Chạy mã đó sẽ làm rơi bảng có tên t1 và tất cả dữ liệu của nó.

IF EXISTS Mệnh đề

Dưới đây là một ví dụ về việc sử dụng IF EXISTS để kiểm tra xem bảng đã tồn tại chưa.

DROP TABLE IF EXISTS t1;

Sử dụng IF EXISTS đảm bảo rằng chúng tôi không gặp lỗi nếu bảng không tồn tại.

Đây là những gì sẽ xảy ra nếu chúng tôi xóa IF EXISTS từ tuyên bố:

DROP TABLE t1;

Kết quả:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't1', because it does not exist or you do not have permission.

Đó là thông báo do SQL Server trả về. Thông báo của bạn sẽ phụ thuộc vào DBMS mà bạn đang sử dụng.

Khoá &Chế độ xem Nước ngoài Phụ thuộc

Một số RDBMS cho phép một RESTRICT tùy chọn hoặc CASCADE từ khóa chỉ định điều gì sẽ xảy ra nếu bảng có bất kỳ khóa ngoài hoặc chế độ xem nào tham chiếu đến nó.

RESTRICT Tùy chọn

Đây là một ví dụ về việc sử dụng RESTRICT khi cố gắng bỏ một bảng được tham chiếu bởi khóa ngoại trong một bảng khác:

DROP TABLE t1 RESTRICT;

Kết quả:

cannot drop table t1 because other objects depend on it

Ví dụ này được thực hiện bằng PostgreSQL. RESTRICT là tùy chọn mặc định, vì vậy chúng tôi sẽ nhận được cùng một kết quả ngay cả khi chúng tôi không bao gồm RESTRICT từ khóa.

CASCADE Tùy chọn

Đây là những gì sẽ xảy ra nếu chúng tôi chuyển sang CASCADE khi cố gắng thả cùng một bảng (được tham chiếu bởi khóa ngoại trong bảng khác):

DROP TABLE t1 CASCADE;

Kết quả:

NOTICE:  drop cascades to constraint t2_c2_fkey on table t2
Commands completed successfully

Điều này đã làm mất khóa ngoại đang tham chiếu đến t1 của chúng tôi bàn. Khóa ngoại được gọi là t2_c2_fkey .

Lưu ý rằng nó không làm rơi bảng có khóa ngoại. Nó chỉ làm rơi khóa ngoại.

Nếu bảng đích (t1 ) được tham chiếu bởi bất kỳ chế độ xem nào, toàn bộ chế độ xem sẽ bị loại bỏ.

Bạn không cần chỉ định CASCADE để loại bỏ bất kỳ chỉ mục, quy tắc, trình kích hoạt hoặc ràng buộc nào tồn tại cho bảng mục tiêu. Chúng tự động bị loại bỏ, ngay cả khi sử dụng tùy chọn mặc định (RESTRICT ).

MySQL và MariaDB

Một số DBMS (chẳng hạn như MySQL và MariaDB) chấp nhận RESTRICTCASCADE từ khóa, nhưng chúng không làm gì cả. Chúng được cung cấp đơn giản để dễ dàng di chuyển hơn giữa các DBMS.

Oracle

Oracle có một cú pháp hơi khác, CASCADE CONSTRAINTS , loại bỏ tất cả các ràng buộc toàn vẹn tham chiếu tham chiếu đến các khóa chính và duy nhất trong bảng đã loại bỏ.

Máy chủ SQL

Máy chủ SQL không hỗ trợ CASCADE hoặc RESTRICT từ khóa. Nếu bảng có bất kỳ phụ thuộc khóa ngoại nào, bạn cần phải loại bỏ chúng trước khi bỏ bảng, nếu không, bạn sẽ gặp lỗi.

Tuy nhiên, trong SQL Server, bạn có thể bỏ một bảng ngay cả khi nó được tham chiếu bởi một dạng xem hoặc thủ tục được lưu trữ. Do đó, bạn nên kiểm tra bất kỳ tham chiếu nào như vậy và loại bỏ chúng một cách rõ ràng bằng cách sử dụng DROP VIEW hoặc DROP PROCEDURE .

SQLite

SQLite không hỗ trợ CASCADE hoặc RESTRICT từ khóa.

Nếu bảng mục tiêu được tham chiếu bởi bất kỳ chế độ xem nào, bảng sẽ vẫn bị loại bỏ (và chế độ xem sẽ vẫn còn).

Nếu bảng đích được tham chiếu bởi bất kỳ khóa ngoại nào, kết quả sẽ phụ thuộc vào việc bạn đã bật khóa ngoại chưa và nếu có, liệu có bất kỳ dữ liệu nào trong bảng con không và nếu có, khóa ngoại có được xác định bằng ON DELETE CASCADE .

Nếu bạn sử dụng SQLite, hãy xem SQLite DROP TABLE cho một ví dụ và thảo luận về việc loại bỏ một bảng được tham chiếu bởi khóa ngoại.

Thả nhiều bảng

Một số RDBMS cho phép bạn bỏ nhiều bảng từ một DROP TABLE tuyên bố.

Ví dụ:

DROP TABLE t11, t12;

Các RDBMS hỗ trợ cú pháp này bao gồm SQL Server, MySQL, MariaDB và PostgreSQL.

Tuy nhiên, nếu bạn đang xóa một bảng được tham chiếu bởi khóa ngoại và khóa ngoại đó ngăn không cho nó bị bỏ, bạn sẽ cần liệt kê bảng con trước bảng mẹ.

Ví dụ:nếu tôi chạy câu lệnh trên trong SQL Server, tôi gặp lỗi sau:

Msg 3726, Level 16, State 1, Line 1
Could not drop object 't11' because it is referenced by a FOREIGN KEY constraint.

Trong trường hợp này, tôi có thể chỉ cần chuyển đổi thứ tự của các bảng trong DROP TABLE của mình tuyên bố:

DROP TABLE t12, t11;

Trên thực tế, trong trường hợp này, tôi gặp một lỗi khác cho tôi biết rằng t12 không tồn tại.

Đây là những gì tôi nhận được:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't12', because it does not exist or you do not have permission.

Điều này là do, mặc dù câu lệnh trước đó không thể thả t11 , trên thực tế, nó đã thành công trong việc loại bỏ t12 .

Và cũng giống như một vở hài kịch của lỗi, lần này nó có thể làm rớt t11 nhưng không phải t12 .

Bất chấp điều đó, cả hai bảng hiện đã bị loại bỏ.

Nhưng nếu bạn nhận được đơn đặt hàng chính xác trong lần đầu tiên, bạn sẽ nhận được một thông báo như sau:

Commands completed successfully.

Từ khóa TẠM THỜI

Một số RDBMS (chẳng hạn như MySQL và MariaDB) chấp nhận TEMPORARY từ khóa.

Nó nằm giữa DROPTABLE , như thế này:

DROP TEMPORARY TABLE t1;

Sử dụng TEMPORARY từ khóa sẽ đảm bảo rằng bạn không vô tình làm rơi một bảng không tạm thời khi cố gắng bỏ một bảng tạm thời.

TEMPORARY từ khóa có các tác dụng sau:

  • Câu lệnh chỉ giảm TEMPORARY bảng.
  • Câu lệnh không gây ra một cam kết ngầm (sử dụng DROP TABLE không có TEMPORARY từ khóa tự động cam kết giao dịch đang hoạt động hiện tại).
  • Không có quyền truy cập nào được kiểm tra. A TEMPORARY bảng chỉ hiển thị với phiên đã tạo nó, vì vậy không cần kiểm tra.

Điều khoản thanh lọc

Oracle có PURGE tùy chọn , bạn có thể sử dụng mệnh đề này nếu muốn bỏ bảng và giải phóng không gian liên kết với nó trong một bước duy nhất. Nếu bạn chỉ định PURGE , thì cơ sở dữ liệu không đặt bảng và các đối tượng phụ thuộc của nó vào thùng rác.

Điều này tương đương với việc đầu tiên bạn thả bảng và sau đó xóa nó khỏi thùng rác, nhưng nó cho phép bạn tiết kiệm một bước trong quy trình.

Lưu ý rằng nếu bạn chỉ định PURGE , bạn sẽ không thể khôi phục bảng.

Nếu bạn không chỉ định PURGE , DROP TABLE câu lệnh không dẫn đến việc không gian được giải phóng trở lại vùng bảng để các đối tượng khác sử dụng và không gian tiếp tục được tính vào hạn ngạch dung lượng của người dùng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Theo dõi cập nhật tự động cho thống kê

  2. Xem xét DBCC CHECKCONSTRAINTS và I / O

  3. Cải thiện Giải pháp Đánh số Trung vị Hàng

  4. Kết nối các ứng dụng ODBC trên Windows với SugarCRM

  5. Toán tử SQL LIKE cho người mới bắt đầu