MySQL में, आप IF NOT EXISTS
. का उपयोग कर सकते हैं CREATE TABLE
का खंड यह जाँचने के लिए कथन कि डेटाबेस में एक ही नाम की तालिका पहले से मौजूद है या नहीं।
यदि तालिका मौजूद नहीं है, तो इसे बनाया जाएगा। अगर यह पहले से मौजूद है, तो इसे नहीं बनाया जाएगा।
उदाहरण
यह इस प्रकार है:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
जहां t1
तालिका का नाम है, और कोष्ठकों के बीच सब कुछ तालिका परिभाषा (अर्थात स्तंभ, आदि) है।
उस स्थिति में, तालिका केवल तभी बनाई जाएगी जब t1
. नामक पहले से कोई तालिका न हो ।
जांचें कि तालिका अभी मौजूद है या नहीं
हम sys.table_exists()
. का उपयोग कर सकते हैं तालिका अब मौजूद है या नहीं यह देखने के लिए प्रक्रिया:
CALL sys.table_exists('test', 't1', @table_type);
SELECT @table_type;
परिणाम:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
यहां, test
डेटाबेस का नाम है, और t1
उस तालिका का नाम है जिसके अस्तित्व की मैं जाँच कर रहा हूँ।
इस मामले में, परिणाम BASE TABLE
. है जिसका अर्थ है कि तालिका मौजूद है।
यह जांचने के कई तरीकों में से एक है कि क्या MySQL में कोई तालिका मौजूद है।
तालिका फिर से बनाने का प्रयास करें
अब यदि हम उस तालिका को फिर से बनाने का प्रयास करते हैं:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
हमें कोई त्रुटि नहीं मिलती:
Query OK, 0 rows affected, 1 warning (0.00 sec)
लेकिन हमें चेतावनी मिलती है।
तो चलिए चेतावनी देखते हैं:
SHOW WARNINGS;
परिणाम:
+-------+------+---------------------------+ | Level | Code | Message | +-------+------+---------------------------+ | Note | 1050 | Table 't1' already exists | +-------+------+---------------------------+
जैसा कि अपेक्षित था, यह हमें बताता है कि तालिका पहले से मौजूद है।
बिना IF NOT EXISTS
खंड
यहां बताया गया है कि जब हम IF NOT EXISTS
. का उपयोग नहीं करते हैं तो क्या होता है एक तालिका बनाने का प्रयास करते समय खंड जो पहले से मौजूद है:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
इस बार हमें एक त्रुटि मिली:
ERROR 1050 (42S01): Table 't1' already exists
यह नोट करना महत्वपूर्ण है कि IF NOT EXISTS
खंड तालिका संरचना/परिभाषा की जांच नहीं करता है। यह केवल जाँचता है कि हमारे द्वारा बनाई जा रही तालिका को उसी नाम से कोई मौजूदा तालिका नहीं है जिसे हम देने का प्रयास कर रहे हैं।
दूसरे शब्दों में, सिर्फ इसलिए कि उस नाम की एक तालिका पहले से मौजूद है, इसका मतलब यह नहीं है कि इसकी सही परिभाषा है।