আমার টেবিলগুলি কীভাবে মুছে ফেলাবেন যাদের সকলের উপসর্গ আছে myprefix_
?
দ্রষ্টব্য: এটি পিএইচপিএমআইএডমিনে চালানো দরকার
আমার টেবিলগুলি কীভাবে মুছে ফেলাবেন যাদের সকলের উপসর্গ আছে myprefix_
?
দ্রষ্টব্য: এটি পিএইচপিএমআইএডমিনে চালানো দরকার
উত্তর:
আপনি এটি কেবল একটি মাইএসকিউএল কমান্ড দিয়ে করতে পারবেন না, তবে আপনি মাইএসকিউএলটি আপনার পক্ষে বিবৃতিটি তৈরি করতে ব্যবহার করতে পারেন:
মাইএসকিউএল শেল বা পিএইচপিএমইএডমিনের মাধ্যমে, নিম্নলিখিত কোয়েরিটি ব্যবহার করুন
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_%';
[...] LIKE 'myprefix\_%';
আগের কিছু উত্তর খুব ভাল ছিল। ওয়েবে অন্যান্য উত্তর থেকে কিছু ধারণার সাথে তাদের ধারণাগুলি একসাথে টেনে নিয়েছি।
আমাকে 'টেম্প_' দিয়ে শুরু করে সমস্ত টেবিল মুছতে হবে কয়েকটি পুনরাবৃত্তির পরে আমি কোডের এই ব্লকটি নিয়ে এসেছি:
-- 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;
আমি আশা করি এটি অন্যান্য মাইএসকিউএল / পিএইচপি প্রোগ্রামারদের জন্য দরকারী।
show tables like 'prefix_%';
ফলাফলগুলি অনুলিপি করুন এবং এগুলি কোনও পাঠ্য সম্পাদকে আটকান বা কোয়েরিটিকে একটি ফাইলে আউটপুট করুন, কয়েকটি অনুসন্ধান ব্যবহার করুন এবং অযাচিত বিন্যাস অপসারণ করতে প্রতিস্থাপন করুন এবং \n
একটি কমা দিয়ে প্রতিস্থাপন ;
করুন এবং শেষে ড্রপ টেবিল যুক্ত করুন।
আপনি দেখতে কিছু দেখতে পাবেন:
drop table myprefix_1, myprefix_2, myprefix_3;
@ আন্ড্রে-মিলার সমাধানটি ভাল তবে আরও ভাল এবং কিছুটা বেশি পেশাদার রয়েছে যা আপনাকে একসাথে সমস্ত কার্যকর করতে সহায়তা করবে। তবুও একাধিক কমান্ডের প্রয়োজন হবে তবে এই সমাধানটি আপনাকে স্বয়ংক্রিয় বিল্ডগুলির জন্য এসকিউএল ব্যবহার করার অনুমতি দেবে।
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;
দ্রষ্টব্য: এই কোডটি প্ল্যাটফর্ম নির্ভর, এটি মাইএসকিউএল এর জন্য তবে নিশ্চিতভাবে এটি পোস্টগ্র্রে, ওরাকল এবং এমএস এসকিউএলকে সামান্য পরিবর্তন সহ প্রয়োগ করা যেতে পারে।
SELECT CONCAT("DROP TABLE ", table_name, ";")
FROM information_schema.tables
WHERE table_schema = "DATABASE_NAME"
AND table_name LIKE "PREFIX_TABLE_NAME%";
আমি এটিকে পছন্দ করতে সম্পাদনা ক্যোয়ারী দ্বারা টেবিলটি সফলভাবে ফেলেছি 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;
আপনি মাইএসকিউএল দিয়ে একটি কমান্ডে এটি করতে পারেন:
drop table myprefix_1, myprefix_2, myprefix_3;
যদিও আপনাকে কোডটিতে গতিশীলভাবে টেবিলের তালিকা তৈরি করতে হবে।
মাইএসকিউএল 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, .. এর মতো একটি ড্রপ কোয়েরি কার্যকর করে
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;
আমি দেখতে পেয়েছি যে প্রস্তুত বিবৃতিগুলি আমার পক্ষে কাজ করার জন্য কিছুটা জটিল তবে 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
পরিবর্তে কোয়েরিটি শেষ করে ;
একটি সামান্য ক্লিনার আউটপুট দেয়