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

Indeks SQL DROP, Tabel DROP, dan Pernyataan Basis Data DROP Dijelaskan dengan Contoh

Pernyataan SQL DROP adalah perintah yang menghapus komponen database yang ada atau seluruh database dengan semua datanya secara permanen. Ada perintah SQL lain dengan efek serupa (TRUNCATE atau DELETE), tetapi kekhususan perintah DROP adalah menghapus semuanya sekaligus. Misalnya, DROP TABLE menghapus data tabel, indeks, pemicu, izin, batasan – seluruh skema tabel.

Pernyataan DROP mengharuskan seseorang untuk sangat berhati-hati saat menggunakannya. Setelah dilakukan, itu tidak dapat dibatalkan. Informasi hilang untuk selamanya. Satu-satunya kesempatan untuk mengembalikan data adalah untuk memulihkan cadangan. Namun, dalam banyak kasus, kita harus menerapkan pernyataan DROP. Artikel ini akan fokus pada kasus tersebut, varian DROP spesifik, dan cara menggunakannya dengan aman.

Persiapan

Untuk memeriksa kasus kami, kami memerlukan database dengan data. Saya telah membuat database pengujian bernama EltechEmployees dengan pertanyaan berikut:

USE [master] 
go 
CREATE DATABASE [EltechEmployees] 
go
 

Dalam database itu, saya telah membuat tabel tblEmployeees – kueri berikut berfungsi untuk itu:

USE [EltechEmployees] 
go 
CREATE TABLE [tblEmployees] 
  ( 
     [businessentityid] [INT] NOT NULL, 
     [nationalidnumber] [NVARCHAR](15) NOT NULL, 
     [loginid]          [NVARCHAR](256) NOT NULL, 
     [jobtitle]         [NVARCHAR](50) NOT NULL, 
     [birthdate]        [DATE] NOT NULL, 
     [maritalstatus]    [NCHAR](1) NOT NULL, 
     [gender]           [NCHAR](1) NOT NULL, 
     [hiredate]         [DATE] NOT NULL, 
     [vacationhours]    [SMALLINT] NOT NULL, 
     [sickleavehours]   [SMALLINT] NOT NULL, 
     [modifieddate]     [DATETIME] NOT NULL 
     
  ) 
go 
 

Langkah selanjutnya adalah membuat dua indeks non-cluster dan satu indeks clustered pada tblEmployees tabel.

  • Indeks non-cluster:IDX_tblEmployees_loginID dan IDX_tblEmployeees_nationalidnumber
  • Satu indeks berkerumun:IDX _tblEmployees_gender

Untuk membuat indeks ini, gunakan kueri berikut:

USE [EltechEmployees] go CREATE INDEX [IDX_tblEmployees_loginID] ON [tblEmployees](loginid) go CREATE INDEX [IDX_tblEmployees_nationalidnumber] ON [tblEmployees](nationalidnumber) go CREATE Clustered INDEX [IDX_tblEmployees_gender] ON [tblEmployees](gender) go

Mari kita lihat indeks yang kita buat:

SELECT Object_name([Index].object_id)                               [Table Name] 
       , 
       [Index].NAME 
       [Index Name] 
       , 
       Col_name([Index Column].object_id, [Index Column].column_id) 
       [Index Column_Name], 
       [Index Column].index_column_id, 
       CASE 
         WHEN is_primary_key = 1 THEN 'Yes' 
         ELSE 'No' 
       END 
       [Is Primary Key], 
       CASE 
         WHEN is_unique = 1 THEN 'Yes' 
         ELSE 'No' 
       END 
       [Is Unique Key] 
FROM   sys.indexes AS [Index] 
       INNER JOIN sys.index_columns AS [Index Column] 
               ON [Index].object_id = [Index Column].object_id 
                  AND [Index].index_id = [Index Column].index_id 
WHERE  [Index].is_hypothetical = 0 
       AND [Index].object_id = Object_id('tblEmployees');
 

Keluaran

Sekarang kita dapat melanjutkan ke contoh praktis.

Jatuhkan Pernyataan Indeks

Kasus pertama kami adalah menjatuhkan indeks dari tabel.

Contoh 1:Jatuhkan Satu atau Beberapa Indeks dari Tabel

Sintaks untuk menjatuhkan beberapa indeks adalah sebagai berikut:

Drop index 
[IndexName] on [SchemaName].[TableName] ,
[IndexName] on [SchemaName].[TableName] 
 
  • NamaIndeks: Tentukan nama indeks yang ingin Anda hapus setelah pernyataan Drop Index .
  • [NamaSkema].[NamaTabel]: Tentukan nama database, nama skema, dan nama tabel. Pernyataan tabel Drop memungkinkan Anda untuk menggunakan nama dua bagian dari objek database apa pun. Nilai [NamaSkema].[NamaTabel] harus ditentukan setelah kata kunci AKTIF .

Misalkan kita ingin melepaskan IX_loginID_tblKaryawan dan IDX_nationalidnumber_tblKaryawan di tblKaryawan meja. Untuk melakukannya, jalankan kueri di bawah ini:

DROP INDEX 
[IDX_tblEmployees_loginID] ON [dbo].[tblEmployees], 
[IDX_tblEmployees_nationalidnumber] ON [dbo].[tblEmployees] 
 

Setelah indeks dijatuhkan, jalankan kueri berikut untuk melihatnya:

SELECT Object_name([Index].object_id)                               [Table Name] 
       , 
       [Index].NAME 
       [Index Name] 
       , 
       Col_name([Index Column].object_id, [Index Column].column_id) 
       [Index Column_Name], 
       [Index Column].index_column_id, 
       CASE 
         WHEN is_primary_key = 1 THEN 'Yes' 
         ELSE 'No' 
       END 
       [Is Primary Key], 
       CASE 
         WHEN is_unique = 1 THEN 'Yes' 
         ELSE 'No' 
       END 
       [Is Unique Key] 
FROM   sys.indexes AS [Index] 
       INNER JOIN sys.index_columns AS [Index Column] 
               ON [Index].object_id = [Index Column].object_id 
                  AND [Index].index_id = [Index Column].index_id 
WHERE  [Index].is_hypothetical = 0 
       AND [Index].object_id = Object_id('tblEmployees'); 
 

Keluaran

Contoh 2:Jatuhkan Indeks dengan MAXDOP dan Opsi ONLINE.

Kita dapat menggunakan opsi MAXDOP dan ONLINE sambil menjatuhkan indeks.

Catatan :Kami hanya dapat menghapus indeks berkerumun menggunakan opsi MAXDOP dan ONLINE.

Sintaksnya adalah sebagai berikut:

DROP Index [indexName] on [schemaname].[tablename] with (MAXDOP = @maxdop_val, ONLINE = @online_option) 
  • Nama indeks: Tentukan nama indeks yang ingin Anda hapus.
  • [NamaSkema].[NamaTabel]: Tentukan nama tiga bagian tabel.
  • @MaxDop_val: Tentukan nilai parameter MAXDOP.
  • @online_option: Nilai yang valid adalah ON dan OFF.

Misalkan kita ingin menghapus PK_Employee_BusinessEntityID indeks dengan opsi MAXDOP dan ONLINE.

Jatuhkan indeks menggunakan nilai opsi MAXDOP ke 5, dan opsi ONLINE ON. Permintaan untuk menjatuhkan indeks adalah sebagai berikut:

DROP INDEX [IDX_tblEmployees_gender] ON [dbo].[tblEmployees] WITH (maxdop=5, 
online=ON)
 

Semua indeks telah dihapus dari tblKaryawan tabel.

Pernyataan Tabel Drop SQL

Pernyataan DROP TABLE menjatuhkan tabel dari database mana pun. Sintaks dari DROP TABLE adalah sebagai berikut:

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

[DatabaseName].[SchemaName].[TableName]: Tentukan nama tabel. Anda dapat menggunakan tiga bagian nama tabel.

Izin

Pengguna harus memiliki ALTER izin pada skema tempat tabel telah dibuat dan Kontrol izin di atas meja, atau jadilah anggota db_ddladmin peran tetap.

Catatan:

  1. Jika Anda menghapus tabel yang direferensikan oleh kunci asing, Anda harus menghapus tabel referensi tersebut terlebih dahulu.
  2. Bila Anda menjatuhkan tabel dengan kolom yang memiliki atribut FILESTREAM, data yang disimpan dalam sistem file tidak akan dihapus.

Contoh 1:Letakkan Tabel Fisik

Dalam contoh berikut, kami menjatuhkan tabel bernama tblEmployeees dari Karyawan Eltech basis data:

Drop table [EltechEmployees].[dbo].[tblEmployees] 

Contoh 2:Letakkan Tabel Sementara

Di sini, kami menjatuhkan tabel sementara. Saya telah membuat tabel sementara bernama #tblEmployee dengan mengeksekusi kode berikut:

CREATE TABLE [#tblemployees] 
  ( 
     [businessentityid] [INT] NOT NULL, 
     [nationalidnumber] [NVARCHAR](15) NOT NULL, 
     [loginid]          [NVARCHAR](256) NOT NULL, 
     [jobtitle]         [NVARCHAR](50) NOT NULL, 
     [birthdate]        [DATE] NOT NULL, 
     [maritalstatus]    [NCHAR](1) NOT NULL, 
     [gender]           [NCHAR](1) NOT NULL, 
     [hiredate]         [DATE] NOT NULL, 
     [vacationhours]    [SMALLINT] NOT NULL, 
     [sickleavehours]   [SMALLINT] NOT NULL, 
     [modifieddate]     [DATETIME] NOT NULL 
  ) 
go
 

Sebelum menjatuhkan meja, kami memeriksa keberadaan tabel temp. Jika tabel ditemukan, maka akan dijatuhkan.

IF Object_id(N'tempdb..#tblEmployees', N'U') IS NOT NULL 
  DROP TABLE #tblemployees; 
go 
 

Jadi, tabel sementara #tblEmployees akan dijatuhkan.

Lepaskan Pernyataan Basis Data

Pernyataan drop database berfungsi untuk menjatuhkan seluruh database. Sintaksnya sebagai berikut:

Drop database [DatabaseName] 

[DatabaseName] :Tentukan nama nama database yang ingin Anda hapus.

Izin

Untuk menghapus database, Anda memerlukan CONTROL atau UBAH DATABASE APAPUN izin pada database. Atau, Anda harus menjadi anggota db_owner peran database tetap.

Catatan :

  1. Saat kami menjatuhkan basis data apa pun di ONLINE negara, SQL Server akan menjatuhkan file database dari disk. Namun, jika Anda menjatuhkan database di OFFLINE negara, SQL Server tidak menjatuhkan file database. Kita harus menghapusnya secara manual.
  2. Untuk menghapus database yang diterbitkan untuk transaksional atau diterbitkan/berlangganan replikasi gabungan, kita harus menghancurkan replikasi dan kemudian menghapus database.
  3. Jika pengguna terhubung ke database, kami tidak dapat menghapus database. Pertama, kita harus mengubah statusnya menjadi SINGLE_USER .

Contoh:Jatuhkan Database yang Sedang Digunakan

Kami ingin melepaskan EltechEmployee basis data. Untuk melakukannya, jalankan kueri berikut:

USE master 
go 
DROP DATABASE [EltechEmployees] 
 

Jika pengguna terhubung ke database, Anda akan menemukan kesalahan berikut:

Msg 3702, Level 16, State 4, Line 3
Cannot drop database "EltechEmployees" because it is currently in use.
 

Untuk memperbaiki kesalahan, kita harus menjalankan kueri berikut:

USE [master] 
go 
ALTER DATABASE eltechemployees SET single_user WITH ROLLBACK immediate 
 

Kueri di atas menyetel basis data di SINGLE_USER mode dan menghapus semua pengguna yang terhubung ke database.

Sekarang, mari kita jalankan pernyataan DROP DATABASE:

USE master 
go 
DROP DATABASE [EltechEmployees] 
 

Keluaran

Seperti yang Anda lihat, perintah berhasil dijalankan.

Ringkasan

Jadi, kami telah memeriksa pernyataan DROP INDEX, DROP TABLE, dan DROP DATABASE, varian spesifik dari pernyataan SQL DROP. Semoga contoh praktis yang disajikan dalam artikel ini membantu menjelaskan bagaimana dan kapan menerapkan perintah ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Profil Data:Menemukan Detail Data

  2. Tutorial SQL untuk Pemula

  3. Memperluas penggunaan DBCC CLONEDATABASE

  4. Model Data untuk Melacak Kepemilikan Anda yang Paling Berharga

  5. SQL Setara (=) Operator untuk Pemula