MySQL: यदि मौजूद नहीं है तो कॉलम कैसे बनाएं?


14

मैं अपनी तालिका के लिए एक कॉलम बनाने की कोशिश कर रहा हूं, अगर यह मौजूद नहीं है। मैंने बहुत शोध किया है लेकिन मुझे अभी तक कोई समाधान नहीं मिला।

क्या यह वास्तव में कॉलम को सशर्त रूप से बनाना संभव है?


मुझे उत्सुकता है ... यदि स्तंभ पहले से मौजूद है, तो केवल त्रुटि में परिवर्तन को विफल होने देने में क्या गलत है?
डेरेक डाउनी

वास्तव में मुझे अपने क्लाइंट को .sql फाइल प्रदान करने की आवश्यकता है जिसमें DB संरचना परिवर्तन से संबंधित सभी प्रश्न होंगे। मैं उन्हें पूरा डेटाबेस नहीं भेज सकता। मैं सिर्फ उन्हें db बदलाव भेजना चाहता हूँ। उस sql फ़ाइल में कई और प्रश्न हैं। यदि कॉलम बनाने के बारे में यह प्रश्न विफल हो गया तो यह सभी प्रश्नों को विफल कर देगा। इसीलिए मैं कॉलम बनाने के लिए अगर शर्त का उपयोग करना चाहता हूं।
zzzzz

यदि आपका डेटाबेस इसका समर्थन करता है तो आप ट्रिगर का उपयोग कर सकते हैं। पहले से ही।
साइबरनार्ड

जवाबों:


8

MySQL ALTER TABLEमें IF EXISTSविनिर्देशन नहीं है ।

यदि आप एक संग्रहित खरीद या प्रोग्रामिंग भाषा का उपयोग करके निम्नलिखित कार्य कर सकते हैं, तो यह एक ऐसी चीज है जिसे आपको नियमित आधार पर करने की आवश्यकता होगी:

स्यूडोकोड:

  • नीचे एसक्यूएल का उपयोग करके यह पता लगाएं कि क्या स्तंभ मौजूद है:

    से चयन column_name करें INFORMATION_SCHEMACOLUMNS कहाँ TABLE_SCHEMA= [डेटाबेस का नाम] और TABLE_NAME= [तालिका का नाम];

  • यदि उपरोक्त क्वेरी परिणाम देती है तो इसका मतलब है कि कॉलम मौजूद है, अन्यथा आप आगे जा सकते हैं और कॉलम बना सकते हैं।


MySQL / MariaDB में मुझे उस क्वेरी का उपयोग करके एक त्रुटि मिलती है, जिसमें कहा गया है कि column_nameमौजूद नहीं है। मैंने क्वेरी को सुधार दिया:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
यीशु अलोंसो अबाद

2
MySQL और (मुझे लगता है) दोनों पर सरल 0 या 1 उत्तर के लिए MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo

14

वास्तव में अब मारिया DB 10.219 के लिए मौजूद है

ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);

बोनस, यह MODIFY के लिए भी काम करता है

ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);

3
> "MYSQL 5.5.5"? यह सही नहीं है, यह केवल मारिया डीबी सुविधा है।
एक्सकैलिबर

1
सुधार के लिए धन्यवाद
पैरोफिक

6

आप इस समाधान का उपयोग कर सकते हैं, जो पहले ही एक अन्य StackOverFlow पोस्ट पर उल्लिखित है: (Ref .: https://stackoverflow.com/a/31989541/ )

MySQL - यदि यह मौजूद नहीं है तो एक कॉलम जोड़ने के लिए सक्षम करें:

SET @dbname = DATABASE();
SET @tablename = "tableName";
SET @columnname = "colName";
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (table_name = @tablename)
      AND (table_schema = @dbname)
      AND (column_name = @columnname)
  ) > 0,
  "SELECT 1",
  CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT(11);")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;

2

यह नीचे मेरे लिए काम किया:

    SELECT count(*)
    INTO @exist
    FROM information_schema.columns
    WHERE table_schema = 'mydatabase'
    and COLUMN_NAME = 'mycolumn'
    AND table_name = 'mytable' LIMIT 1;

    set @query = IF(@exist <= 0, 'ALTER TABLE mydatabase.`mytable`  ADD COLUMN `mycolumn` MEDIUMTEXT NULL',
    'select \'Column Exists\' status');

    prepare stmt from @query;

    EXECUTE stmt;

मैं इस एक के साथ चला गया, धन्यवाद।
स्टुअर्ट मैकइंटायर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.