Tüm MySQL tabloları komut satırından nasıl kaldırılır?


29

Genellikle Terminal.app'i açarım ve uzaktaki MySQL veritabanına bağlanırım.

Sonra bir tablo bırakmak için bu komutu kullanıyorum:

mysql> drop table [table name];

Ama ihtiyacım olan şey veritabanındaki tüm tabloları bırakmak için komut satırı.

Kullanırsam:

mysql> drop database [database name];

Veritabanını tamamen imha edeceğim ve tekrar tablo oluşturamayacağım. Haklı mıyım


Yanıtlar:


27

Veritabanını bırakıp hemen yeniden oluşturabilirsiniz:

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

Veya veritabanındaki her bir tabloyu bırakmak için bir komut dosyası kullanabilirsiniz.


Tamam, emin olmak için: Terminaldeki uzak veritabanına şu satırla bağlanıyorum: / Applications / MAMP / Library / bin / mysql -h 80.54.554.10 -u adm_user -p my_db . Dediğiniz gibi veritabanını bıraktıktan ve oluşturduktan sonra bu bağlantı değerlerini değiştirmem gerekir mi yoksa aynı kalırlar mı?
Chefnelone

1
@chef - Tüm tabloları bırakmak ve tüm veritabanını bırakmak aynı etkiye sahip değildir. Yalnızca tabloları bırakırsanız, veritabanında herhangi bir izin varsa, veritabanını bırakıp yeniden yarattığınızda kalmaz.
Nifle,

10
@chefnelone: ​​Dikkatli olun !!! Veritabanını bırakmak, saklı yordamları ve kullanıcı tanımlı görünümleri de bırakır.
RolandoMySQLDBA

Benim için oldukça açık. Her tabloyu silmek için komut dosyası ile gideceğim.
chefnelone

1
tamamen güvensiz, yorumlara bakın http://stackoverflow.com/a/12403742/1713660
vladkras

10

Aşağıdaki komutu deneyebilirsiniz:

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

Veya:

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

DB_NAMEVeritabanının adı nerede ? Veri tabanı kimlik bilgilerini ~/.my.cnf, komutun içine ya da komutuna ekleyebilirsiniz (örn. -uroot -proot).

Bu yöntemin, veritabanı kullanıcınızın bırakma izni olmaması durumunda veritabanını bırakma ve oluşturma konusunda bazı avantajları vardır.


1
Onaylandı ikinci örnek, harika. Önce ek bayrakları olarak db kimlik bilgilerini ekleme --silentve -v/ --verbosesırasıyla şöyle:--user=username --password=password --host=host.name
Burada

İyi bir fikir. Fakat YABANCI ANAHTAR varken biraz sorun yaşayın. Ben | sort -rters çizgiye eklerim , ancak yine de bazı db uyumlu değil.
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


2
Süper Kullanıcıya Hoşgeldiniz! Bu soruyu cevaplayabilse de, neden böyle olduğunu açıklarsanız daha iyi bir cevap olur . Bazı açıklamalar ve bağlamlar içeren kapsamlı, kaliteli cevaplar arıyoruz. Sadece bir satırlık cevap vermeyin; Cevabınızın neden doğru olduğunu, ideal olarak alıntılarla açıklayın. Açıklama içermeyen cevaplar kaldırılabilir. Ayrıca, biçimlendirmenizi kontrol edin.
G-Man '

Unutulmamış ayarı yabancı_key_checks = bırakma tablolarından sonra 1: bkz. Stackoverflow.com/a/2873991/4306855 mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "GÖSTERISI GÖSTER" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%; SET FOREIGN_KEY_CHECKS = 1; ' | mysql -u KULLANICI -pPASSWORDHERE -v DATABASENAMEHERE
toto21
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.