Bagaimana cara menghapus semua tabel MySQL dari command-line?

29

Biasanya saya membuka Terminal.app dan terhubung ke database MySQL jarak jauh.

Lalu saya menggunakan perintah ini untuk menjatuhkan tabel:

mysql> drop table [table name];

Tapi yang saya butuhkan adalah baris perintah untuk meletakkan semua tabel dalam database.

Jika saya menggunakan:

mysql> drop database [database name];

Saya akan menghancurkan database sepenuhnya dan saya tidak akan dapat membuat tabel lagi. Apakah saya benar?

chefnelone
sumber

Jawaban:

27

Anda dapat menjatuhkan database kemudian segera membuatnya kembali:

mysql> drop database [database name];
mysql> create database [database name];

Atau Anda bisa menggunakan skrip untuk menjatuhkan setiap tabel dalam database.

William Jackson
sumber
ok, hanya untuk memastikan: Saya terhubung ke basis data jauh di Terminal dengan baris ini: / Applications / MAMP / Library / bin / mysql -h 80.54.554.10 -u adm_user -p my_db . Setelah menjatuhkan dan membuat database seperti yang Anda katakan, apakah saya perlu mengubah nilai koneksi ini atau mereka tetap sama?
chefnelone
1
@ chef - Menjatuhkan semua tabel dan menjatuhkan seluruh database tidak memiliki efek yang sama. Jika Anda hanya menjatuhkan tabel, izin basis data apa pun akan tetap ada, tidak demikian jika Anda menjatuhkan / membuat ulang basis data.
Nifle
10
@chefnelone: ​​Hati-hati !!! Menjatuhkan basis data juga menyimpan prosedur tersimpan dan tampilan yang ditentukan pengguna.
RolandoMySQLDBA
Cukup jelas untuk saya. Saya akan pergi dengan skrip untuk menghapus setiap tabel.
chefnelone
1
benar-benar tidak aman, lihat komentar http://stackoverflow.com/a/12403742/1713660
vladkras
10

Anda dapat mencoba perintah berikut:

mysqldump --no-data --add-drop-table DB_NAME | grep ^DROP | mysql -v DB_NAME

Atau:

mysql --silent --skip-column-names -e "SHOW TABLES" DB_NAME | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -v DB_NAME

Di mana DB_NAMEnama basis data Anda. Kredensial database Anda dapat menentukan ~/.my.cnfatau menambahkannya ke perintah (misalnya -uroot -proot).

Metode ini memiliki beberapa kelebihan dibandingkan menjatuhkan dan membuat database jika pengguna database Anda tidak memiliki izin untuk menjatuhkannya.

kenorb
sumber
1
Contoh kedua yang dikonfirmasi, luar biasa. Tambahkan kredensial db sebagai bendera tambahan sebelum --silentdan -v/ --verbosemasing-masing seperti:--user=username --password=password --host=host.name
sini
Ide bagus. Tetapi memiliki beberapa masalah ketika ada KUNCI LUAR NEGERI. Saya menambah | sort -rgaris kebalikannya, tetapi masih belum kompatibel beberapa db.
Fancyoung
2

mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "SHOW TABLES" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%;' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE

sveilleux2
sumber
2
Selamat Datang di Pengguna Super! Meskipun ini dapat menjawab pertanyaan, itu akan menjadi jawaban yang lebih baik jika Anda dapat menjelaskan mengapa itu terjadi. Kami mencari jawaban komprehensif dan berkualitas tinggi yang memberikan penjelasan dan konteks. Jangan hanya memberikan jawaban satu baris; jelaskan mengapa jawaban Anda benar, idealnya dengan kutipan. Jawaban yang tidak termasuk penjelasan dapat dihapus. Juga, periksa pemformatan Anda.
G-Man Mengatakan 'Reinstate Monica'
Jangan lupa set foreign_key_checks = 1 setelah drop tables: lihat stackoverflow.com/a/2873991/4306855 mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "SHOW TABLES" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABEL%; SET FOREIGN_KEY_CHECKS = 1; ' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE
toto21