MySQL INFORMATION_SCHEMA
बचाव के लिए डेटाबेस:
-- First check if the table exists
IF EXISTS(SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'
AND table_name LIKE 'wild')
-- If exists, retreive columns information from that table
THEN
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'tbl_name'
AND table_schema = 'db_name';
-- do some action, i.e. ALTER TABLE if some columns are missing
ALTER TABLE ...
-- Table does not exist, create a new table
ELSE
CREATE TABLE ....
END IF;
अधिक जानकारी:
- MySQL संदर्भ मैनुअल:अध्याय 19. INFORMATION_SCHEMA टेबल्सए>
- MySQL संदर्भ मैनुअल:INFORMATION_SCHEMA TABLES टेबल ए>
- MySQL संदर्भ मैनुअल:INFORMATION_SCHEMA COLUMNS टेबलए>
अपडेट करें:
एक अन्य विकल्प, संभवतः आसान, मौजूदा तालिका को छोड़ना और नए स्कीमा के साथ इसे फिर से बनाना है। ऐसा करने के लिए, आपको चाहिए:
- अस्थायी तालिका बनाएं, मौजूदा तालिका की एक सटीक प्रतिलिपि
- अस्थायी तालिका को पुरानी तालिका के डेटा से भरें
- पुरानी तालिका छोड़ दें
- नई स्कीमा के साथ नई तालिका बनाएं
- नई तालिका को अस्थायी तालिका से जानकारी के साथ भरें
- अस्थायी तालिका छोड़ें।
तो, SQL कोड में:
CREATE TABLE old_table_copy LIKE old_table;
INSERT INTO old_table_copy
SELECT * FROM old_table;
DROP TABLE old_table;
CREATE TABLE new_table (...new values...);
INSERT INTO new_table ([... column names from old table ...])
SELECT [...column names from old table ...]
FROM old_table_copy;
DROP TABLE old_table_copy;
वास्तव में अंतिम चरण, "अस्थायी तालिका छोड़ें।", आप थोड़ी देर के लिए छोड़ सकते हैं। बस के मामले में, आप पुरानी तालिका, "जस्ट-इन-केस" का किसी प्रकार का बैकअप लेना चाहेंगे।
अधिक जानकारी:
- MySQL संदर्भ मैनुअल:टेबल सिंटैक्स बनाएं
- MySQL संदर्भ मैनुअल:INSERT Syntax
- MySQL संदर्भ मैनुअल:INSERT ... सिंटेक्स चुनें