データベースを削除せずにMySQLデータベースのすべてのテーブルを削除するにはどうすればよいですか?


12

事前に名前を知らずにデータベース内のすべてのテーブルを削除する必要があります。典型的な手順は、データベースを削除してから再作成することですが、これはオプションではありません。それを行う最良の方法は何ですか?


1
おそらく事前にこれを尋ねるべきだったが、私が想像するよりも遅い方が良い:どのOS?
ジェフスナイダー

OSのようなUnix / Linux。
エンジェルチェン

回答:


18

mysqldumpを使用したシンプルなbashワンライナーがあります(Thingy Ma Jig Blogから)。

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

このエラーが発生する場合:

ERROR 1217 (23000) at line 1: Cannot delete or update a parent row: 
    a foreign key constraint fails

以下を試してください:

(echo 'SET foreign_key_checks = 0;'; 
 (mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | 
     grep ^DROP); 
 echo 'SET foreign_key_checks = 1;') | \
    mysql -u[USERNAME] -p[PASSWORD] -b [DATABASE]

今では、制約を無視します。


5

information_schemaテーブルを使用してデータベースに関するメタデータを取得し、そこにリストされているテーブルを削除する必要があります。


3

簡単なシェルスクリプトを試してみることもできます。

#!/bin/bash

IFS=$'\n'
for table in `mysql <databaseName> -N -e 'show tables'`; do
    echo mysql <databaseName> -e "drop table $table"
done

echo期待どおりに動作することを確認した後、削除します。


ところで、なぜIFSの値の前に「$」を書くのですか?「IFS = '\ n'」のように見えないのはなぜですか?
kolypto 2009年

@o_OTyncを使用する$''と、bashはバックスラッシュシーケンスをそのまま解釈する代わりに解釈します。 '\n'ちょうどそのように、正確に\ nが含まれます。これ$IFSは、\およびn文字で分割されることを理解します。 $'\n'改行文字0x0Dが含まれます。詳細については、gnu.org / software / bash / manual / bashref.html#ANSI_002dC-Quotingをご覧ください。
ジェフスナイダー

これは、INFORMATION_SCHEMAを使用するよりも簡単だと思います。
エンジェルチェン

0

最近Xaprbブログにこれをうまくカバーするエントリがありました。

使用することINFORMATION_SCHEMAが必ずしも良いことではない理由が含まれており、Maatkitの素敵な人々のツールを参照しています。

以下を試してくださいmk-find

mk-find '<database>' --printf 'DROP TABLE %D.%N'

結果に満足している場合:

mk-find '<database>' --exec 'DROP TABLE %D.%N'

-2

ファイルシステムにアクセスできる場合は、単にrm -rf databasename/*:)。

Drop databaseステートメントも同じことをします... MySQLマニュアルからの抜粋:

DROP DATABASEステートメントは、指定されたデータベースディレクトリから、MySQL自体が通常の操作中に作成する可能性のあるファイルとディレクトリを削除します。


2
MySQLは...突然消えて、これらのファイルを期待されていないと操作、トランザクション、複製、ロックの任意の数の中間であることができ、任意の非自明なセットアップのための非常に悪いアイデア
bot403

適切なコマンドと手順を含むように回答を修正することを検討しますか?
bot403
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.