सभी उपसर्गों वाले मेरे टेबल को कैसे हटाएं myprefix_
?
नोट: इसे phpMyAdmin में निष्पादित करने की आवश्यकता है
सभी उपसर्गों वाले मेरे टेबल को कैसे हटाएं myprefix_
?
नोट: इसे phpMyAdmin में निष्पादित करने की आवश्यकता है
जवाबों:
आप इसे केवल एक MySQL कमांड के साथ नहीं कर सकते हैं, हालांकि आप के लिए स्टेटमेंट बनाने के लिए MySQL का उपयोग कर सकते हैं:
MySQL शेल या PHPMyAdmin के माध्यम से, निम्नलिखित क्वेरी का उपयोग करें
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
यह एक DROP स्टेटमेंट जेनरेट करेगा जिसे आप टेबल को ड्रॉप करने के लिए कॉपी और एक्जिक्यूट कर सकते हैं।
संपादित करें: यहां एक अस्वीकरण - ऊपर दिया गया विवरण उस उपसर्ग के साथ सभी डेटाबेस में सभी तालिकाओं को छोड़ देगा। यदि आप इसे किसी विशिष्ट डेटाबेस तक सीमित करना चाहते हैं, तो इस तरह दिखने के लिए क्वेरी को संशोधित करें और अपने स्वयं के डेटाबेस_नाम के साथ डेटाबेस_नाम बदलें:
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
[...] LIKE 'myprefix\_%';
पहले के कुछ उत्तर बहुत अच्छे थे। मैंने वेब पर अन्य उत्तरों से कुछ धारणाओं के साथ उनके विचारों को एक साथ खींचा है।
मुझे 'temp_' से शुरू होने वाली सभी तालिकाओं को हटाने की आवश्यकता है क्योंकि कुछ पुनरावृत्तियों के बाद मैं इस कोड के ब्लॉक के साथ आया:
-- Set up variable to delete ALL tables starting with 'temp_'
SET GROUP_CONCAT_MAX_LEN=10000;
SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ', @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
मुझे आशा है कि यह अन्य MySQL / PHP प्रोग्रामर के लिए उपयोगी है।
show tables like 'prefix_%';
परिणामों को कॉपी करें और उन्हें एक पाठ संपादक में पेस्ट करें या क्वेरी को फ़ाइल में आउटपुट करें, अवांछित स्वरूपण को हटाने के लिए कुछ खोज और प्रतिस्थापन का उपयोग करें और अंत में \n
एक अल्पविराम डालकर ;
सामने की ओर ड्रॉप टेबल जोड़ें।
आपको कुछ ऐसा मिलेगा जो इस तरह दिखता है:
drop table myprefix_1, myprefix_2, myprefix_3;
@ -re- मिलर समाधान अच्छा है लेकिन वहाँ भी बेहतर और थोड़ा अधिक पेशेवर है जो आपको एक बार में सभी को निष्पादित करने में मदद करेगा। अभी भी एक से अधिक कमांड की आवश्यकता होगी लेकिन यह समाधान आपको स्वचालित बिल्ड के लिए SQL का उपयोग करने की अनुमति देगा।
SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
FROM information_schema.TABLES
WHERE TABLE_NAME LIKE 'myprefix_%');
PREPARE stmt FROM 'DROP TABLE @tbls';
EXECUTE stmt USING @tbls;
DEALLOCATE PREPARE stmt;
नोट: यह कोड प्लेटफ़ॉर्म डिपेंडेंट है, यह MySQL के लिए है, लेकिन निश्चित रूप से इसे मामूली बदलावों के साथ Postgre, Oracle और MS SQL के लिए लागू किया जा सकता है।
SELECT CONCAT("DROP TABLE ", table_name, ";")
FROM information_schema.tables
WHERE table_schema = "DATABASE_NAME"
AND table_name LIKE "PREFIX_TABLE_NAME%";
मैं इस तरह से क्वेरी को संपादित करके तालिका को सफलतापूर्वक छोड़ता हूं
SET GROUP_CONCAT_MAX_LEN=10000;
SET FOREIGN_KEY_CHECKS = 0;
SET @tbls = (SELECT GROUP_CONCAT(CONCAT('`', TABLE_NAME, '`'))
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'pandora'
AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ', @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
आप MySQL के साथ एक कमांड में कर सकते हैं:
drop table myprefix_1, myprefix_2, myprefix_3;
आपको संभवतः कोड में तालिका सूची को गतिशील रूप से बनाना होगा।
एक वैकल्पिक दृष्टिकोण MySQL 5 के लिए सामान्य उद्देश्य दिनचर्या पुस्तकालय का उपयोग करना होगा ।
मैं सिर्फ वही एसक्यूएल पोस्ट करना चाहता था जिसका मैंने उपयोग किया है - यह शीर्ष 3 उत्तरों के मिश्रण का कुछ है:
SET GROUP_CONCAT_MAX_LEN=10000;
SET @del = (
SELECT CONCAT('DROP TABLE ', GROUP_CONCAT(TABLE_NAME), ';')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME LIKE 'prefix_%'
);
PREPARE stmt FROM @del;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
GROUP_CONCAT का उपयोग करते हुए बस एक और समाधान ताकि यह ड्रॉप ड्रॉप टेबल 1, टेबल 2, जैसे एक ड्रॉप क्वेरी को निष्पादित करेगा
।
SET @Drop_Stm = CONCAT('DROP TABLE ', (
SELECT GROUP_CONCAT(TABLE_NAME) AS All_Tables FROM information_schema.tables
WHERE TABLE_NAME LIKE 'prefix_%' AND TABLE_SCHEMA = 'database_name'
));
PREPARE Stm FROM @Drop_Stm;
EXECUTE Stm;
DEALLOCATE PREPARE Stm;
मैंने पाया कि तैयार किए गए बयान मेरे लिए काम करने के लिए थोड़े पेचीदा थे, लेकिन GROUP_CONCAT_MAX_LEN
जब आपके पास बहुत सी टेबल होती हैं तो सेटिंग करना आवश्यक था। इसने mysql कमांड लाइन से कट-एंड-पेस्ट के साथ एक सरल तीन-चरण प्रक्रिया का परिणाम दिया जो मेरे लिए बहुत काम आया:
SET GROUP_CONCAT_MAX_LEN=10000;
SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
AS statement FROM information_schema.tables
WHERE table_name LIKE 'myprefix_%';
फिर परिणामी लंबे DROP स्टेटमेंट को ध्यान से काटें और पेस्ट करें ।
\G
बजाय ;
थोड़ा क्लीनर आउटपुट देता है