যেহেতু সমস্ত টেবিলগুলি মাইআইএসএএম, এটি আমার উত্তরটি প্রকাশ করা সহজ করে।
প্রথমত, শূন্য সারি রয়েছে এমন টেবিলগুলির জন্য আপনাকে INFORMATION_SCHEMA টি জিজ্ঞাসা করতে হবে:
SELECT table_schema,table_name FROM information_schema.tables
WHERE table_rows = 0 AND table_schema NOT IN
('information_schema','mysql','performance_schema');
এরপরে, খালি টেবিলগুলি ফেলে দেওয়ার জন্য ক্যোয়ারী তৈরি করুন:
SELECT CONCAT('DROP TABLE ',table_schema,'.',table_name,';') DropTableCommand
FROM information_schema.tables
WHERE table_rows = 0 AND table_schema NOT IN
('information_schema','mysql','performance_schema');
এখন, কমান্ডগুলি একটি বহিরাগত এসকিউএল পাঠ্য ফাইলের মধ্যে ফেলে দিন।
SQL="SELECT CONCAT('DROP TABLE ',table_schema,'.',table_name,';') DropTableCommand"
SQL="${SQL} FROM information_schema.tables WHERE table_rows = 0 AND table_schema"
SQL="${SQL} NOT IN ('information_schema','mysql','performance_schema')"
mysql -uroot -p -ANe"${SQL}" > DropTables.sql
নিম্নলিখিতগুলির একটির সাথে সামগ্রীগুলি দেখুন
less DropTables.sql
cat DropTables.sql
আপনি যদি এর সামগ্রীতে সন্তুষ্ট হন তবে স্ক্রিপ্টটি চালান:
mysql -uroot -p < DropTables.sql
বা mysql এ লগইন করুন এবং এটি চালান:
mysql> source DropTables.sql
একবার চেষ্টা করে দেখো !!!
কায়েট : এই কৌশলটি কেবল মাইআইএসএএম টেবিলের সাথে কাজ করে কারণ একটি মাইস্যাম টেবিলের সারি গণনা টেবিলগুলির মধ্যে শারীরিকভাবে সঞ্চিত রয়েছে .MYD
। INFORMATION_SCHEMA.TABLES মেটাডেটা টেবিলটি সর্বদা এটি পড়ে এবং আপডেট হয়। এএনএনডডব দিয়ে চেষ্টা করবেন না !!!
আপডেট 2014-02-05 11:46 EST
আমি বাদ দিয়েছি এমন একটি কারণ রয়েছে ('information_schema','mysql','performance_schema')
mysql
স্কিমা এটা খালি টেবিল হয়েছে। কিছু MyISAM
, কিছু InnoDB
, কিছু CSV
।
উদাহরণস্বরূপ, আমার ডেস্কটপে মাইএসকিউএল 5.6.15 এর জন্য মাইএসকিএল স্কিমায় আমার টেবিলগুলি এখানে রয়েছে
mysql> select table_name,engine,table_rows
-> from information_schema.tables
-> where table_schema='mysql';
+---------------------------+--------+------------+
| table_name | engine | table_rows |
+---------------------------+--------+------------+
| columns_priv | MyISAM | 0 |
| db | MyISAM | 2 |
| event | MyISAM | 0 |
| func | MyISAM | 0 |
| general_log | CSV | 2 |
| help_category | MyISAM | 40 |
| help_keyword | MyISAM | 485 |
| help_relation | MyISAM | 1090 |
| help_topic | MyISAM | 534 |
| innodb_index_stats | InnoDB | 0 |
| innodb_table_stats | InnoDB | 0 |
| ndb_binlog_index | MyISAM | 0 |
| plugin | MyISAM | 0 |
| proc | MyISAM | 0 |
| procs_priv | MyISAM | 0 |
| proxies_priv | MyISAM | 1 |
| servers | MyISAM | 0 |
| slave_master_info | InnoDB | 0 |
| slave_relay_log_info | InnoDB | 0 |
| slave_worker_info | InnoDB | 0 |
| slow_log | CSV | 2 |
| tables_priv | MyISAM | 0 |
| time_zone | MyISAM | 0 |
| time_zone_leap_second | MyISAM | 0 |
| time_zone_name | MyISAM | 0 |
| time_zone_transition | MyISAM | 0 |
| time_zone_transition_type | MyISAM | 0 |
| user | MyISAM | 6 |
+---------------------------+--------+------------+
28 rows in set (0.01 sec)
mysql>
সেই টেবিল কিছু (যেমন অদৃশ্য হলে columns_priv
, proc_priv
, tables_priv
, ইত্যাদি), অনুদান প্রক্রিয়া সঠিকভাবে কাজ করতে পারে বা mysqld কারণ শুরু নাও হতে পারে। আপনি মাইএসকিএল.প্রোকটিকে তত্পর করতে চান না কেননা এটি স্টোরড পদ্ধতিগুলির ফিজিকাল হোম। অন্যান্য প্রক্রিয়াগুলি যদি না হয় আপনি সেগুলি ব্যবহার করতে চান যেমন মাইএসকিএল স্কিমার অভ্যন্তরে ইনোডিবি সারণি ব্যবহার করে ক্র্যাশস্যাফ প্রতিলিপি ব্যবহার করা বা টাইমজোন তথ্য সন্নিবেশ করতে চান তবে সেগুলি কাজ করতে পারে না।
আপডেট 2014-02-05 12:36 EST
আমি নির্দিষ্ট কারণে তার উত্তরের জন্য টম ডেস্পকে প্রশংসা করতে চাই : তার বাক্য গঠনটি কোনও বাহ্যিক স্ক্রিপ্ট ব্যবহার না করেই ড্রপটি করতে পারে । তার ধারণাটি ব্যবহার করে, আমাকে একটি ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলের ড্রপ টেবিল কমান্ডটি ক্যাপচার করি।
SELECT CONCAT('DROP TABLE ',GROUP_CONCAT(DBTB),';')
INTO @DropCommand
FROM (SELECT CONCAT(table_schema,'.',table_name) DBTB
FROM information_schema.tables
WHERE table_rows = 0 AND table_schema NOT IN
('information_schema','mysql','performance_schema')) A;
SELECT @DropCommand;
যদি আউটপুটটি SELECT @DropCommand;
সঠিক হয় তবে কমান্ডটি এভাবে চালিত করুন:
PREPARE s FROM @DropCommand;
EXECUTE s;
DEALLOCATE PREPARE s;
এটি দুটি জিনিস নির্মূল করে:
- একটি বাহ্যিক এসকিউএল পাঠ্য ফাইলের প্রয়োজন
- প্রতিটি টেবিলের জন্য একটি পৃথক ড্রপ টেবল কমান্ড চালাচ্ছে