Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Pernyataan SQL DROP TABLE dan Berbagai Kasus Penggunaan

Pernyataan SQL DROP TABLE berfungsi untuk menjatuhkan tabel dari database. Ini menghapus tabel dan data serta indeks yang terkait dengannya. Pernyataan itu tidak dapat diubah. Dengan demikian, Anda dapat memulihkan tabel hanya dengan memulihkan cadangan.

Artikel ini mencakup kasus-kasus berikut:

  1. Hapus satu atau beberapa tabel.
  2. Hapus tabel yang digunakan dalam Tampilan.
  3. Hapus tabel yang memiliki kunci asing.
  4. Hapus tabel yang memiliki indeks berkerumun dan tidak berkerumun.
  5. Hapus tabel dari penyiapan replikasi.

Sintaks dari pernyataan DROP TABLE adalah sebagai berikut:

IF EXISTS DROP TABLE [DatabaseName].[SchemaName].[TableName]

Catatan:Jika Anda menggunakan SQL Server 2016 dan yang lebih baru, Anda dapat menentukan JIKA ADA sebelum DROP TABLE pernyataan.

Juga, Anda menentukan nama tabel setelah pernyataan DROP TABLE. Format nama tabel harus [Nama Basis Data].[Nama Skema].[Nama Tabel].

Contoh sederhana dari pernyataan DROP TABLE

Untuk demonstrasi, saya telah memulihkan AdventureWorks2017 database di workstation saya. Di sini, saya akan menghapus karyawan tabel.

Gunakan kueri berikut yang digunakan untuk menjatuhkan tabel:

DROP TABLE [AdventureWorks2017].[dbo].[employees]

Saya telah menginstal alat Devart dbForge SQL Complete di SQL Server Management Studio. Ketika saya menjalankan pernyataan SQL DROP TABLE, itu meminta kotak dialog konfirmasi, seperti yang ditunjukkan di bawah ini:

Klik Tetap Jalankan . Meja dijatuhkan.

Untuk memverifikasi, jalankan kueri berikut:

SELECT * FROM dbo. employee

Jika berhasil menjatuhkan tabel, Anda akan menerima kesalahan berikut:

Msg 208, Level 16, State 1, Line 1
Invalid object name 'dbo.employee'.

Lepaskan tabel yang digunakan dalam Tampilan

Di sini, kami akan mencoba menjatuhkan tabel yang digunakan dalam tampilan database. Jalankan skrip berikut untuk membuat tampilan bernama vPerson :

CREATE VIEW vPerson 
AS
SELECT * FROM Person p

Jalankan DROP TABLE perintah untuk menghapus Orang tabel:

DROP TABLE [AdventureWorks2017].[dbo].[person]

Setelah tabel dijatuhkan, jalankan kueri SELECT untuk mengisi data dari vPerson . Ini akan menghasilkan kesalahan:

Msg 208, Level 16, State 1, Procedure vPerson, Line 3 [Batch Start Line 0]
Invalid object name 'Person'.
Msg 4413, Level 16, State 1, Line 1
Could not use the view or function 'vPerson' because of binding errors.

Kesalahan ini terjadi saat objek yang menjadi tumpuan tampilan dijatuhkan.

Lepaskan tabel yang memiliki kunci asing

Jika Anda telah membuat kunci asing pada sebuah tabel, Anda tidak dapat menghapus tabel induk sebelum menghapus tabel anak. Artinya, Anda harus menghapus tabel anak atau kunci asing yang mereferensikan tabel anak terlebih dahulu.

Ada dua tabel bernama tblstudent dan tblSchool – diagram ER adalah sebagai berikut:

Catatan :Saya menggunakan dbForge Studio untuk SQL Server 2019 untuk membuat diagram database – diagram ini memberikan wawasan yang sesuai tentang struktur tabel dengan semua elemennya dan hubungan entitas antar tabel.

Kueri berikut membuat tabel bernama tblstudent dan tblSchool dan kunci utama dan kunci asingnya:

CREATE TABLE tblSchool
(
	SchoolID INT identity(1,1),
	SchoolName VARCHAR(500),
	City varchar(250),
	CONSTRAINT PK_SchoolID PRIMARY KEY  (SchoolID)  
)
GO
CREATE TABLE tblStudent
(
StudentID INT IDENTITY(1,1) ,
StudentName VARCHAR(250),
StudentGrade CHAR(1),
SchoolID INT,
CONSTRAINT PK_StudentID PRIMARY KEY  (StudentID),
Constraint FK_SchoolID FOREIGN KEY (SchoolID) REFERENCES tblSchool (SchoolID)
)
GO

Jalankan kueri berikut untuk menghapus tblstudent tabel:

Drop table [tblSchool]

Kueri mengembalikan kesalahan berikut:

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

Dalam demo kami, jika Anda ingin menghapus tblschool tabel, Anda harus membuang tblstudent meja dulu. Lihat kueri untuk melepaskan tblStudent dan tblschool tabel:

Drop table [tblSchool]
Go
Drop table [tblStudent]
Go

Dimungkinkan juga untuk menjatuhkan tabel batch dalam satu pernyataan DROP TABLE. Jalankan kueri sebagai berikut:

Drop table [tblSchool], [tblStudent]

Lepaskan tabel dengan indeks

Mari kita amati skenario lain dari perilaku pernyataan DROP TABLE. Asumsikan bahwa kita telah membuat tabel bernama tblstudent. Ini memiliki indeks berkerumun dan tidak berkerumun.

Ketika kita menjatuhkan tabel menggunakan DROP TABLE, apakah itu menghapus indeks? Mari kita periksa. Saya telah membuat tabel bernama tblStudent yang memiliki satu indeks berkerumun dan satu tidak berkerumun. Pertanyaannya adalah sebagai berikut:

CREATE TABLE tblStudent
(
StudentID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
StudentName VARCHAR(250),
StudentGrade CHAR(1),
SchoolID INT
)
GO
CREATE NONCLUSTERED INDEX IDX_tblStudent_StudentName ON tblStudent(StudentName) 
GO

Kita dapat melihat daftar indeks dengan menanyakan sys.indexes DMV.

Setelah tabel dijatuhkan, jalankan kueri berikut:

SELECT Object_name(object_id) AS [Table Name],
       NAME                   AS [Index Name],
       type_desc              [Index Type]
FROM   sys.indexes
WHERE  object_id = Object_id('tblStudent')  

Keluaran:

Seperti yang Anda lihat, kami telah membuat indeks berkerumun dan tidak berkerumun untuk tblStudent tabel.

Sekarang, jalankan perintah berikut untuk menghapus tabel:

Drop table tblStudent

Sekali lagi, jalankan kueri yang sama yang kami gunakan untuk mengisi daftar indeks:

SELECT Object_name(object_id) AS [Table Name],
       NAME                   AS [Index Name],
       type_desc              [Index Type]
FROM   sys.indexes
WHERE  object_id = Object_id('tblStudent')  

Keluaran:

Tangkapan layar di atas menggambarkan bahwa kueri mengembalikan kumpulan hasil kosong. Jadi, saat kita menjatuhkan tabel, indeks yang terkait dengan tabel itu juga akan turun.

Lepaskan tabel dari Replikasi

Misalkan Anda ingin menjatuhkan tabel yang merupakan bagian dari replikasi. Dalam hal ini, Anda harus melakukan langkah tambahan.

Saya telah mengonfigurasi replikasi antara dua contoh SQL Server 2019 bernama SQL01 dan SQL02. Selanjutnya, saya telah mereplikasi tblStudent dan tblSchool tabel.

Kami menjatuhkan tabel tblSchool dari SQL01 dengan menjalankan kueri berikut:

use codingsight
go
drop table tblSchool

Keluaran:

Msg 3724, Level 16, State 3, Line 3
Cannot drop the table 'tblSchool' because it is being used for replication.

Kesalahan di atas adalah penjelasan. Untuk menjatuhkan tabel, pertama-tama kita harus menghapusnya dari replikasi:

  1. Buka SQL Server Management Studio dan Hubungkan ke SQL01.
  2. Luaskan Replikasi -> Perluas Publikasi Lokal .
  3. Klik kanan pada Publikasi dan pilih Properti .

Di Properti Publikasi jendela, klik Artikel .

Di sana, Anda dapat melihat daftar tabel. Hapus centang tblSchool tabel dan klik OK .

Catatan: Saat Anda menghapus artikel dari replikasi, snapshot sebelumnya menjadi tidak valid. Anda harus membuat cuplikan baru setelah menghapus artikel.

Setelah tabel dihapus dari replikasi, jalankan DROP TABLE perintah pada SQL01 :

use codingsight
go
drop table tblSchool

Keluaran:

Seperti yang Anda lihat, meja telah dijatuhkan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. KTT MVP 2013 :Tinjauan singkat dan mengintip ke depan

  2. Mengapa Anda Membutuhkan Pemodelan Data?

  3. Integrasikan Firebase dengan PHP Untuk Komunikasi Waktu Nyata

  4. Mengubah Bagaimana isql Mengeksekusi SQL

  5. Basis data RAC startup gagal dengan kesalahan ORA-12547