Database
 sql >> Base de données >  >> RDS >> Database

Index SQL DROP, table DROP et instructions de base de données DROP expliquées avec des exemples

L'instruction SQL DROP est une commande qui supprime les composants de base de données existants ou les bases de données entières avec toutes leurs données de façon permanente. Il existe d'autres commandes SQL ayant un effet similaire (TRUNCATE ou DELETE), mais la spécificité de la commande DROP est qu'elle supprime tout d'un coup. Par exemple, DROP TABLE supprime les données de la table, les index, les déclencheurs, les autorisations, les contraintes - l'ensemble du schéma de la table.

L'instruction DROP nécessite d'être extrêmement prudent lors de son utilisation. Une fois effectuée, elle ne peut pas être annulée. L'information est perdue pour de bon. La seule chance de retourner les données sera de restaurer une sauvegarde. Pourtant, dans de nombreux cas, nous devons appliquer les instructions DROP. Cet article se concentrera sur de tels cas, les variantes DROP spécifiques et comment les utiliser en toute sécurité.

Préparatifs

Pour examiner nos cas, nous aurons besoin d'une base de données avec les données. J'ai créé une base de données de test nommée EltechEmployees avec la requête suivante :

USE [master] 
go 
CREATE DATABASE [EltechEmployees] 
go

Dans cette base de données, j'ai créé une table tblEmployees – la requête suivante sert à cela :

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 

L'étape suivante consiste à créer deux index non clusterisés et un index clusterisé sur tblEmployees tableau.

  • Index non clusterisés :IDX_tblEmployees_loginID et IDX_tblEmployees_nationalidnumber
  • Un index groupé :IDX _tblEmployees_gender

Pour créer ces index, utilisez la requête suivante :

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

Voyons les index que nous avons créés :

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');

Sortie

Nous pouvons maintenant passer aux exemples pratiques.

Déclaration d'index de suppression

Notre premier cas consiste à supprimer des index d'une table.

Exemple 1 :Supprimez un ou plusieurs index de la table

La syntaxe pour supprimer plusieurs index est la suivante :

Drop index 
[IndexName] on [SchemaName].[TableName] ,
[IndexName] on [SchemaName].[TableName] 
  • Nom de l'index : Spécifiez le nom de l'index que vous souhaitez supprimer après l'instruction Drop Index .
  • [SchemaName].[TableName] : Spécifiez le nom de la base de données, le nom du schéma et le nom de la table. L'instruction Drop table vous permet d'utiliser le nom en deux parties de n'importe quel objet de base de données. Les valeurs de [SchemaName].[TableName] doit être spécifié après le mot-clé ON .

Supposons que nous voulions supprimer IX_loginID_tblEmployees et IDX_nationalidnumber_tblEmployés sur les tblEmployés table. Pour ce faire, exécutez la requête ci-dessous :

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

Une fois les index supprimés, exécutez la requête suivante pour les afficher :

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'); 

Sortie

Exemple 2 :Supprimer l'index avec MAXDOP et l'option ONLINE.

Nous pouvons utiliser les options MAXDOP et ONLINE lors de la suppression de l'index.

Remarque  :Nous ne pouvons supprimer que l'index clusterisé à l'aide des options MAXDOP et ONLINE.

La syntaxe est la suivante :

DROP Index [indexName] on [schemaname].[tablename] with (MAXDOP = @maxdop_val, ONLINE = @online_option)
  • Nom de l'index : Spécifiez le nom de l'index que vous souhaitez supprimer.
  • [SchemaName].[TableName] : Spécifiez le nom en trois parties de la table.
  • @MaxDop_val : Spécifiez la valeur du paramètre MAXDOP.
  • @option_enligne : Les valeurs valides sont ON et OFF.

Supposons que nous voulions supprimer le PK_Employee_BusinessEntityID index avec les options MAXDOP et ONLINE.

Déposez l'index à l'aide de la valeur de l'option MAXDOP sur 5 et l'option ONLINE est activée. La requête pour supprimer l'index est la suivante :

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

Tous les index ont été supprimés de tblEmployees tableau.

Instruction de suppression de table SQL

L'instruction DROP TABLE supprime la table de n'importe quelle base de données. La syntaxe de DROP TABLE est la suivante :

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

[DatabaseName].[SchemaName].[TableName] : Spécifiez le nom du tableau. Vous pouvez utiliser le nom en trois parties de la table.

Autorisations

L'utilisateur doit avoir le ALTER permission sur le schéma où la table a été créée et le Control autorisation sur la table, ou être membre de db_ddladmin rôle fixe.

Remarque :

  1. Si vous supprimez une table référencée par une clé étrangère, vous devez d'abord supprimer cette table de référence.
  2. Lorsque vous supprimez une table avec une colonne ayant l'attribut FILESTREAM, les données stockées dans le système de fichiers ne seront pas supprimées.

Exemple 1 :Déposer une table physique

Dans l'exemple suivant, nous supprimons la table nommée tblEmployees des employés d'Eltech base de données :

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

Exemple 2 :supprimer une table temporaire

Ici, nous supprimons une table temporaire. J'ai créé une table temporaire nommée #tblEmployee en exécutant le code suivant :

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

Avant de supprimer la table, nous vérifions l'existence de la table temporaire. Si la table est trouvée, elle sera supprimée.

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

Ainsi, la table temporaire #tblEmployees sera supprimé.

Supprimer la déclaration de base de données

L'instruction Drop database fonctionne pour supprimer la base de données entière. La syntaxe est la suivante :

Drop database [DatabaseName]

[Nom de la base de données] :Spécifiez le nom de la base de données que vous souhaitez supprimer.

Autorisations

Pour supprimer la base de données, vous avez besoin du CONTROL ou MODIFIER TOUTE BASE DE DONNÉES autorisation sur la base de données. Ou, vous devez être membre de db_owner rôle de base de données fixe.

Remarques :

  1. Lorsque nous déposons une base de données dans EN LIGNE état, le serveur SQL supprimera les fichiers de base de données du disque. Cependant, si vous déposez la base de données dans le mode HORS LIGNE état, SQL Server ne supprime pas les fichiers de base de données. Nous devons les supprimer manuellement.
  2. Pour supprimer la base de données publiée pour transactionnelle ou publiée/abonnée à la réplication de fusion, nous devons détruire la réplication, puis supprimer la base de données.
  3. Si les utilisateurs sont connectés à la base de données, nous ne pouvons pas supprimer la base de données. Tout d'abord, nous devons changer son état en SINGLE_USER .

Exemple :supprimer la base de données en cours d'utilisation

Nous voulons supprimer les EltechEmployees base de données. Pour ce faire, exécutez la requête suivante :

USE master 
go 
DROP DATABASE [EltechEmployees] 

Si les utilisateurs sont connectés à la base de données, vous rencontrerez l'erreur suivante :

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

Pour rectifier l'erreur, nous devons exécuter la requête suivante :

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

La requête ci-dessus définit la base de données dans le SINGLE_USER mode et supprime tous les utilisateurs connectés à la base de données.

Exécutons maintenant l'instruction DROP DATABASE :

USE master 
go 
DROP DATABASE [EltechEmployees] 

Sortie

Comme vous pouvez le voir, la commande a été exécutée avec succès.

Résumé

Ainsi, nous avons examiné les variantes spécifiques des instructions DROP INDEX, DROP TABLE et DROP DATABASE de l'instruction SQL DROP. J'espère que les exemples pratiques présentés dans cet article ont aidé à expliquer comment et quand appliquer ces commandes.