Apakah mungkin untuk menghapus semua tabel kosong dari basis data besar saya (mysql)?
Saya mencari perintah sql untuk secara otomatis menghapus semua tabel kosong itu.
Saat ini, saya memiliki 305 tabel di dataset saya, dan sekitar 30% di antaranya adalah tabel kosong lama, yang tidak akan digunakan dalam aplikasi baru saya.
Hanya untuk mengklarifikasi; Semua tabel bertipe = MyISAM
Jawaban:
Idenya mungkin akan mencari menggunakan tabel kosong
INFORMATION_SCHEMA.TABLES
Maka Anda mungkin dapat menghasilkan kueri SQL dengan
Cepat dan agak kotor, tetapi seharusnya benar-benar berfungsi.
sumber
Karena semua tabel adalah MyISAM, ini membuat jawaban saya lebih mudah untuk diungkapkan.
Pertama, Anda perlu meminta informasi kepada tabel yang memiliki nol baris: INFORMATION_SCHEMA:
Selanjutnya, rumuskan kueri untuk menjatuhkan tabel kosong:
Sekarang, buang perintah ke file teks SQL eksternal.
Lihatlah isinya dengan salah satu dari yang berikut ini
less DropTables.sql
cat DropTables.sql
Jika Anda puas dengan isinya, jalankan skrip:
atau masuk ke mysql dan jalankan seperti ini:
Cobalah !!!
CAVEAT : Teknik ini hanya bekerja dengan tabel MyISAM karena jumlah baris dari tabel MyISAM secara fisik disimpan di
.MYD
dalam tabel. Tabel metadata INFORMATION_SCHEMA.TABLES selalu membaca ini dan memperbarui. JANGAN MENCOBA DENGAN INNODB !!!UPDATE 2014-02-05 11:46 EST
Ada alasan saya dikecualikan
('information_schema','mysql','performance_schema')
The
mysql
Skema memiliki meja kosong di dalamnya. BeberapaMyISAM
, beberapaInnoDB
, beberapaCSV
.Sebagai contoh, berikut adalah tabel saya di skema mysql untuk MySQL 5.6.15 di desktop saya
Jika beberapa dari mereka tabel menghilang (seperti
columns_priv
,proc_priv
,tables_priv
, dll), mekanisme hibah mungkin tidak bekerja dengan baik atau dapat menyebabkan mysqld tidak start up. Anda juga tidak ingin memukul mysql.proc karena ini adalah rumah fisik dari Stored Procedures. Mekanisme lain mungkin tidak berfungsi jika Anda ingin menggunakannya, seperti Replikasi CrashSafe menggunakan tabel InnoDB di dalam skema mysql, atau jika Anda ingin memasukkan informasi zona waktu.UPDATE 2014-02-05 12:36 EST
Saya ingin memuji Tom Desp atas jawabannya karena alasan tertentu: Sintaksnya dapat melakukan drop tanpa menggunakan skrip eksternal . Menggunakan idenya, izinkan saya menangkap perintah DROP TABLE ke dalam variabel yang ditentukan pengguna.
Jika output dari
SELECT @DropCommand;
sudah benar, maka jalankan perintah seperti ini:Ini menghilangkan dua hal:
sumber