मैं अपनी तालिका के लिए एक कॉलम बनाने की कोशिश कर रहा हूं, अगर यह मौजूद नहीं है। मैंने बहुत शोध किया है लेकिन मुझे अभी तक कोई समाधान नहीं मिला।
क्या यह वास्तव में कॉलम को सशर्त रूप से बनाना संभव है?
मैं अपनी तालिका के लिए एक कॉलम बनाने की कोशिश कर रहा हूं, अगर यह मौजूद नहीं है। मैंने बहुत शोध किया है लेकिन मुझे अभी तक कोई समाधान नहीं मिला।
क्या यह वास्तव में कॉलम को सशर्त रूप से बनाना संभव है?
जवाबों:
MySQL ALTER TABLE
में IF EXISTS
विनिर्देशन नहीं है ।
यदि आप एक संग्रहित खरीद या प्रोग्रामिंग भाषा का उपयोग करके निम्नलिखित कार्य कर सकते हैं, तो यह एक ऐसी चीज है जिसे आपको नियमित आधार पर करने की आवश्यकता होगी:
स्यूडोकोड:
नीचे एसक्यूएल का उपयोग करके यह पता लगाएं कि क्या स्तंभ मौजूद है:
से चयन column_name
करें INFORMATION_SCHEMA
। COLUMNS
कहाँ TABLE_SCHEMA
= [डेटाबेस का नाम] और TABLE_NAME
= [तालिका का नाम];
यदि उपरोक्त क्वेरी परिणाम देती है तो इसका मतलब है कि कॉलम मौजूद है, अन्यथा आप आगे जा सकते हैं और कॉलम बना सकते हैं।
column_name
मौजूद नहीं है। मैंने क्वेरी को सुधार दिया:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
वास्तव में अब मारिया 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);
आप इस समाधान का उपयोग कर सकते हैं, जो पहले ही एक अन्य 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;
यह नीचे मेरे लिए काम किया:
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;