Database
 sql >> डेटाबेस >  >> RDS >> Database

SQL DROP इंडेक्स, DROP टेबल और DROP डेटाबेस स्टेटमेंट उदाहरणों के साथ समझाया गया

SQL DROP स्टेटमेंट एक कमांड है जो मौजूदा डेटाबेस घटकों या संपूर्ण डेटाबेस को उनके सभी डेटा के साथ स्थायी रूप से हटा देता है। समान प्रभाव वाले अन्य SQL कमांड हैं (TRUNCATE या DELETE), लेकिन DROP कमांड की विशिष्टता यह है कि यह एक ही बार में सब कुछ हटा देता है। उदाहरण के लिए, DROP TABLE तालिका डेटा, अनुक्रमणिका, ट्रिगर, अनुमतियाँ, बाधाएँ - तालिका की संपूर्ण स्कीमा को हटा देता है।

DROP स्टेटमेंट का उपयोग करते समय बेहद सावधान रहने की आवश्यकता है। एक बार प्रदर्शन करने के बाद, इसे वापस रोल नहीं किया जा सकता है। जानकारी अच्छे के लिए खो गई है। डेटा वापस करने का एकमात्र मौका बैकअप को पुनर्स्थापित करना होगा। फिर भी, कई मामलों में, हमें DROP स्टेटमेंट लागू करने पड़ते हैं। यह लेख ऐसे मामलों, विशिष्ट DROP प्रकारों और उन्हें सुरक्षित रूप से उपयोग करने के तरीके पर ध्यान केंद्रित करेगा।

तैयारी

हमारे मामलों की जांच करने के लिए, हमें डेटा के साथ एक डेटाबेस की आवश्यकता होगी। मैंने EltechEmployees . नाम का एक परीक्षण डेटाबेस बनाया है निम्नलिखित प्रश्न के साथ:

USE [master] 
go 
CREATE DATABASE [EltechEmployees] 
go

उस डेटाबेस में, मैंने एक तालिका बनाई है tblकर्मचारी - उसके लिए निम्न क्वेरी काम करती है:

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 

अगला चरण tblकर्मचारियों पर दो गैर-संकुल अनुक्रमणिका और एक संकुल अनुक्रमणिका बनाना है टेबल।

  • गैर-संकुल अनुक्रमणिका:IDX_tblEmployees_loginID और IDX_tblEmployees_nationalidnumber
  • एक क्लस्टर इंडेक्स:IDX _tblEmployees_gender

इन अनुक्रमणिकाओं को बनाने के लिए, निम्न क्वेरी का उपयोग करें:

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

आइए देखें कि हमने जो इंडेक्स बनाए हैं:

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

आउटपुट

अब हम व्यावहारिक उदाहरणों पर आगे बढ़ सकते हैं।

ड्रॉप इंडेक्स स्टेटमेंट

हमारा पहला मामला एक टेबल से इंडेक्स को हटा रहा है।

उदाहरण 1:तालिका से एक या एकाधिक अनुक्रमणिका छोड़ें

एकाधिक अनुक्रमणिका को छोड़ने का सिंटैक्स निम्न है:

Drop index 
[IndexName] on [SchemaName].[TableName] ,
[IndexName] on [SchemaName].[TableName] 
  • इंडेक्सनाम: इंडेक्स नाम निर्दिष्ट करें जिसे आप ड्रॉप करना चाहते हैं ड्रॉप इंडेक्स स्टेटमेंट के बाद
  • [स्कीमानाम]।[टेबलनाम]: डेटाबेस का नाम, स्कीमा नाम और तालिका का नाम निर्दिष्ट करें। ड्रॉप टेबल स्टेटमेंट आपको किसी भी डेटाबेस ऑब्जेक्ट के दो-भाग के नाम का उपयोग करने की अनुमति देता है। [SchemaName].[TableName] . के मान निर्दिष्ट किया जाना चाहिए चालू कीवर्ड के बाद

मान लीजिए कि हम IX_loginID_tblकर्मचारियों को छोड़ना चाहते हैं और IDX_nationalidnumber_tblकर्मचारी tblकर्मचारियों . पर टेबल। ऐसा करने के लिए, निम्न क्वेरी चलाएँ:

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

एक बार अनुक्रमणिका गिरा दिए जाने के बाद, उन्हें देखने के लिए निम्न क्वेरी चलाएँ:

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

आउटपुट

उदाहरण 2:MAXDOP और ONLINE विकल्प के साथ ड्रॉप इंडेक्स।

अनुक्रमणिका छोड़ते समय हम MAXDOP और ONLINE विकल्पों का उपयोग कर सकते हैं।

ध्यान दें :हम MAXDOP और ONLINE विकल्पों का उपयोग करके केवल संकुल अनुक्रमणिका को छोड़ सकते हैं।

वाक्य रचना इस प्रकार है:

DROP Index [indexName] on [schemaname].[tablename] with (MAXDOP = @maxdop_val, ONLINE = @online_option)
  • इंडेक्सनाम: उस अनुक्रमणिका का नाम निर्दिष्ट करें जिसे आप छोड़ना चाहते हैं।
  • [SchemaName].[TableName]: तालिका के तीन-भाग का नाम निर्दिष्ट करें।
  • @MaxDop_val: MAXDOP पैरामीटर का मान निर्दिष्ट करें।
  • @online_option: मान्य मान चालू और बंद हैं।

मान लीजिए हम PK_Employee_BusinessEntityID . को छोड़ना चाहते हैं MAXDOP और ऑनलाइन विकल्पों के साथ अनुक्रमणिका।

MAXDOP विकल्प के मान का उपयोग करके इंडेक्स को 5 पर छोड़ दें, और ऑनलाइन विकल्प चालू है। अनुक्रमणिका छोड़ने की क्वेरी निम्न है:

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

tblकर्मचारियों . से सभी इंडेक्स हटा दिए गए हैं टेबल।

एसक्यूएल ड्रॉप टेबल स्टेटमेंट

DROP TABLE स्टेटमेंट किसी भी डेटाबेस से टेबल को ड्रॉप करता है। DROP TABLE का सिंटैक्स निम्नलिखित है:

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

[DatabaseName].[SchemaName].[TableName]: तालिका का नाम निर्दिष्ट करें। आप तालिका के तीन-भाग के नाम का उपयोग कर सकते हैं।

अनुमतियां

उपयोगकर्ता के पास ALTER . होना चाहिए उस स्कीमा पर अनुमति जहां तालिका बनाई गई है और नियंत्रण मेज पर अनुमति, या db_ddladmin . के सदस्य बनें निश्चित भूमिका।

नोट:

  1. यदि आप किसी विदेशी कुंजी द्वारा संदर्भित तालिका को छोड़ते हैं, तो आपको पहले उस संदर्भ तालिका को छोड़ना होगा।
  2. जब आप FILESTREAM विशेषता वाले कॉलम वाली तालिका छोड़ते हैं, तो फ़ाइल सिस्टम में संग्रहीत डेटा छोड़ा नहीं जाएगा।

उदाहरण 1:एक भौतिक तालिका छोड़ें

निम्नलिखित उदाहरण में, हम tblकर्मचारी . नाम की तालिका छोड़ रहे हैं Eltechकर्मचारियों . से डेटाबेस:

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

उदाहरण 2:एक अस्थायी तालिका छोड़ें

यहां, हम एक अस्थायी तालिका छोड़ रहे हैं। मैंने #tblEmployee . नाम की एक अस्थायी तालिका बनाई है निम्नलिखित कोड निष्पादित करके:

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

तालिका छोड़ने से पहले, हम अस्थायी तालिका के अस्तित्व की जांच करते हैं। यदि तालिका मिल जाती है, तो उसे गिरा दिया जाएगा।

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

इस प्रकार, अस्थायी तालिका #tblकर्मचारी गिरा दिया जाएगा।

डेटाबेस विवरण छोड़ें

ड्रॉप डेटाबेस स्टेटमेंट पूरे डेटाबेस को ड्रॉप करने का काम करता है। सिंटैक्स निम्न है:

Drop database [DatabaseName]

[डेटाबेसनाम] :उस डेटाबेस नाम का नाम निर्दिष्ट करें जिसे आप छोड़ना चाहते हैं।

अनुमतियां

डेटाबेस को छोड़ने के लिए, आपको नियंत्रण . की आवश्यकता होगी या कोई भी डेटाबेस बदलें डेटाबेस पर अनुमति। या, आपको db_owner . का सदस्य होना चाहिए निश्चित डेटाबेस भूमिका।

टिप्पणी :

  1. जब हम किसी डेटाबेस को ऑनलाइन . में छोड़ते हैं स्थिति, SQL सर्वर डिस्क से डेटाबेस फ़ाइलों को छोड़ देगा। हालांकि, यदि आप डेटाबेस को ऑफ़लाइन . में छोड़ रहे हैं स्थिति, SQL सर्वर डेटाबेस फ़ाइलों को नहीं छोड़ता है। हमें उन्हें मैन्युअल रूप से हटाना होगा।
  2. लेन-देन के लिए प्रकाशित डेटाबेस को छोड़ने या मर्ज प्रतिकृति के लिए प्रकाशित/सदस्यता लेने के लिए, हमें प्रतिकृति को नष्ट करना होगा और फिर डेटाबेस को छोड़ना होगा।
  3. यदि उपयोगकर्ता डेटाबेस से जुड़े हैं, तो हम डेटाबेस को छोड़ नहीं सकते। सबसे पहले, हमें इसकी स्थिति को SINGLE_USER . में बदलना होगा ।

उदाहरण:उपयोग किए जा रहे डेटाबेस को छोड़ दें

हम EltechEmployees . को छोड़ना चाहते हैं डेटाबेस। ऐसा करने के लिए, निम्न क्वेरी चलाएँ:

USE master 
go 
DROP DATABASE [EltechEmployees] 

यदि उपयोगकर्ता डेटाबेस से जुड़े हैं, तो आपको निम्न त्रुटि का सामना करना पड़ेगा:

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

त्रुटि को सुधारने के लिए, हमें निम्नलिखित क्वेरी को निष्पादित करना होगा:

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

उपरोक्त क्वेरी डेटाबेस को SINGLE_USER . में सेट करती है मोड और डेटाबेस से जुड़े सभी उपयोगकर्ताओं को छोड़ देता है।

अब, DROP DATABASE स्टेटमेंट चलाते हैं:

USE master 
go 
DROP DATABASE [EltechEmployees] 

आउटपुट

जैसा कि आप देख सकते हैं, आदेश सफलतापूर्वक निष्पादित किया गया था।

सारांश

इस प्रकार, हमने SQL DROP स्टेटमेंट के DROP INDEX, DROP TABLE, और DROP DATABASE स्टेटमेंट विशिष्ट वेरिएंट की जांच की है। आशा है कि इस लेख में प्रस्तुत व्यावहारिक उदाहरणों ने यह समझाने में मदद की कि इन आदेशों को कैसे और कब लागू किया जाए।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लॉकिंग और प्रदर्शन

  2. SQLintersection के लिए लास वेगास में हमसे जुड़ें और $100 बचाएं

  3. SQL में काउंट द्वारा ऑर्डर कैसे करें?

  4. डेटाबेस हार्डवेयर और इन्फ्रास्ट्रक्चर ट्रेंड्स

  5. डेटाबेस सामान्यीकरण के बारे में आपको जो कुछ पता होना चाहिए