এসকিউএল: উপসর্গ সহ সারণী মোছা


উত্তর:


178

আপনি এটি কেবল একটি মাইএসকিউএল কমান্ড দিয়ে করতে পারবেন না, তবে আপনি মাইএসকিউএলটি আপনার পক্ষে বিবৃতিটি তৈরি করতে ব্যবহার করতে পারেন:

মাইএসকিউএল শেল বা পিএইচপিএমইএডমিনের মাধ্যমে, নিম্নলিখিত কোয়েরিটি ব্যবহার করুন

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) 
    AS statement FROM information_schema.tables 
    WHERE table_name LIKE 'myprefix_%';

এটি একটি DROP বিবৃতি উত্পন্ন করবে যা আপনি টেবিলগুলি ফেলে দেওয়ার জন্য অনুলিপি এবং সম্পাদন করতে পারেন than

সম্পাদনা: এখানে একটি দাবি অস্বীকার - উপরে উত্পন্ন বিবৃতিটি সেই উপসর্গ সহ সমস্ত ডাটাবেসে সমস্ত সারণী ফেলে দেবে। আপনি যদি এটি কোনও নির্দিষ্ট ডাটাবেসে সীমাবদ্ধ রাখতে চান তবে ক্যোয়ারীটি দেখতে এটি পরিবর্তন করুন এবং আপনার নিজের ডাটাবেস_নামের সাথে ডাটাবেস_নামটি প্রতিস্থাপন করুন:

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) 
    AS statement FROM information_schema.tables 
    WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';

আমার কাছে কেবল একটি ডাটাবেস রয়েছে তাই আমার ২ য় রেকর্ডের প্রয়োজন হবে না।
ডেনিজ জোয়েটম্যান

4
@ এলিজাহ লিন সীমার উত্স সম্ভবত GROUP_CONCAT সর্বোচ্চ দৈর্ঘ্যের কারণে। আপনি এটি প্রসারিত করতে পারেন, উদাহরণস্বরূপ এখানে দেখুন
আসফ ডেভিড

7
স্বরে নোট করুন max সংখ্যা বাড়ানোর সংখ্যা বাড়িয়ে দিন: SEST SESSION
মোহাম্মদ জোরেদ

2
দয়া করে মনে রাখবেন যে, কিছু ক্ষেত্রে, টেবিলের উপসর্গের নামগুলি আন্ডারস্কোরগুলি থেকে বাঁচতে হবে[...] LIKE 'myprefix\_%';
ম্যাজিক্টালগ্যুই

1
এটি অসংখ্য সদৃশ টেবিলের নামগুলি ফেরত দেয়। পঙ্কজ খুরানা পোস্ট করেছেন যে উত্তরটি আইএমএইচওতে আরও ভাল কাজ করে।
জেরেমি

37

আগের কিছু উত্তর খুব ভাল ছিল। ওয়েবে অন্যান্য উত্তর থেকে কিছু ধারণার সাথে তাদের ধারণাগুলি একসাথে টেনে নিয়েছি।

আমাকে 'টেম্প_' দিয়ে শুরু করে সমস্ত টেবিল মুছতে হবে কয়েকটি পুনরাবৃত্তির পরে আমি কোডের এই ব্লকটি নিয়ে এসেছি:

-- 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;

আমি আশা করি এটি অন্যান্য মাইএসকিউএল / পিএইচপি প্রোগ্রামারদের জন্য দরকারী।


1
এই ঠিক সঠিক উত্তর। অন্যান্য উত্তরগুলি একাধিক পদক্ষেপ ব্যবহার করে বা ম্যানুয়ালি এটি করা প্রয়োজন। 4 বছরের পরে কীভাবে এই উত্তরের আরও ভোট নেই তা জানেন না!
gbe

25
show tables like 'prefix_%';

ফলাফলগুলি অনুলিপি করুন এবং এগুলি কোনও পাঠ্য সম্পাদকে আটকান বা কোয়েরিটিকে একটি ফাইলে আউটপুট করুন, কয়েকটি অনুসন্ধান ব্যবহার করুন এবং অযাচিত বিন্যাস অপসারণ করতে প্রতিস্থাপন করুন এবং \nএকটি কমা দিয়ে প্রতিস্থাপন ;করুন এবং শেষে ড্রপ টেবিল যুক্ত করুন।

আপনি দেখতে কিছু দেখতে পাবেন:

drop table myprefix_1, myprefix_2, myprefix_3;

1
আমি যে ওয়েবহোস্টটি ব্যবহার করছি তাতে তথ্য_সেমি.টায়বলের অ্যাক্সেস ছিল না, তাই ধন্যবাদ জানার উপায় ছিল!
ফ্লোরেন্ট রোকেস

10

@ আন্ড্রে-মিলার সমাধানটি ভাল তবে আরও ভাল এবং কিছুটা বেশি পেশাদার রয়েছে যা আপনাকে একসাথে সমস্ত কার্যকর করতে সহায়তা করবে। তবুও একাধিক কমান্ডের প্রয়োজন হবে তবে এই সমাধানটি আপনাকে স্বয়ংক্রিয় বিল্ডগুলির জন্য এসকিউএল ব্যবহার করার অনুমতি দেবে।

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;

দ্রষ্টব্য: এই কোডটি প্ল্যাটফর্ম নির্ভর, এটি মাইএসকিউএল এর জন্য তবে নিশ্চিতভাবে এটি পোস্টগ্র্রে, ওরাকল এবং এমএস এসকিউএলকে সামান্য পরিবর্তন সহ প্রয়োগ করা যেতে পারে।


ত্রুটি 1064 (42000): আপনার এসকিউএল সিনট্যাক্সে আপনার একটি ত্রুটি রয়েছে; ম্যানুয়ালটি যা আপনার মাইএসকিউএল সার্ভার সংস্করণের সাথে সামঞ্জস্য করে ডান সিনট্যাক্সের জন্য 1 লাইন 1 ইআরআরআর 1243 (এইচওয়াই 1000) এর নিকটবর্তী সঠিক সিনট্যাক্সের জন্য: অজানা প্রস্তুত বিবৃতি হ্যান্ডলার (এসএমটি) এক্সিকিউটি এয়ারর 1243 (এইচওয়াই 1000) দেওয়া হয়েছে: অজানা প্রস্তুত বিবৃতি হ্যান্ডলার (stmt) ডিফলকেট প্রস্তুতিতে দেওয়া হয়েছে
রনি তোভি

সিনট্যাক্স ত্রুটি এখানে: 'ড্রপ টেবিল @tbls' থেকে স্ট্রিমটি প্রস্তুত করুন;
20:20


3

আমি এটিকে পছন্দ করতে সম্পাদনা ক্যোয়ারী দ্বারা টেবিলটি সফলভাবে ফেলেছি drop

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;

বিদেশী মূল সীমাবদ্ধতাগুলি সম্বোধন করার সময় এটি কেবলমাত্র আমি খুঁজে পেলাম যে একটি শিবাংয়ের পুরো অপারেশনটি করেছিল।
ইভান ম্যাটসন

2

আপনি মাইএসকিউএল দিয়ে একটি কমান্ডে এটি করতে পারেন:

drop table myprefix_1, myprefix_2, myprefix_3;

যদিও আপনাকে কোডটিতে গতিশীলভাবে টেবিলের তালিকা তৈরি করতে হবে।

মাইএসকিউএল 5 এর জন্য সাধারণ উদ্দেশ্যে রুটিন লাইব্রেরিটি ব্যবহার করা বিকল্প বিকল্প হবে ।


2

আমি ঠিক আমার ব্যবহৃত এসকিউএল পোস্ট করতে চেয়েছিলাম - এটি শীর্ষ 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;

2

GROUP_CONCAT ব্যবহার করে কেবল অন্য সমাধান যাতে এটি ড্রপ টেবিল 1, টেবিল 2, .. এর মতো একটি ড্রপ কোয়েরি কার্যকর করে
will

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;

1

আমি দেখতে পেয়েছি যে প্রস্তুত বিবৃতিগুলি আমার পক্ষে কাজ করার জন্য কিছুটা জটিল তবে GROUP_CONCAT_MAX_LENআপনার যখন অনেকগুলি টেবিল থাকে তখন সেটি নির্ধারণ করা প্রয়োজনীয় ছিল। এর ফলে মাইএসকিএল কমান্ড লাইনটি কাট-পেস্ট সহ একটি সহজ তিন-পদক্ষেপ প্রক্রিয়া তৈরি হয়েছিল যা আমার পক্ষে দুর্দান্ত কাজ করেছে:

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পরিবর্তে কোয়েরিটি শেষ করে ;একটি সামান্য ক্লিনার আউটপুট দেয়
স্টুয়ার্ট কার্ডাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.