データベーステーブル内のデータを削除する一般的な方法は、削除または切り捨ての方法で削除または切り捨てることです。テーブル内のデータの一部または一部を削除する場合は、削除操作を使用して削除するのが適切です。テーブル内のすべてのデータを削除する場合は、これが適しています。削除の切り捨てと同じです。
したがって、問題は、特定のデータベースに多数のテーブルがあり、データベース内のすべてのテーブルのすべてのデータを削除したい場合、どうすればよいですか?
この問題を解決するには、主に2つのケースがあります。データベース内のすべてのテーブルの構造を保持する必要がない場合、答えは簡単です。目的を達成するには、コマンドdrop database databasenameを実行します。しかし、データベース内のすべてのテーブルの構造を保持する必要があり、すべてのテーブルのデータを削除したい場合、どのように解決できますか?切り捨てを数回実行しても問題ないと言う人もいますが、削除するテーブルがデータベースに多数ある場合は、数十または数百のテーブルを実行してください。何百もの切り捨て操作は明らかに良い方法ではありませんか?これまでのところ、これはこの記事で説明する方法です。
削除する方法は、実際にはtruncatメソッドを実行することですが、削除するたびにtruncateコマンドを手動で入力する必要はありません。sqlコマンドを使用してすべての切り捨てステートメントを生成し、それらを.sqlスクリプトファイルに書き込んでから、スクリプトを実行して削除操作を完了し、テーブル構造を保持します。
truncateコマンドを生成するsqlステートメントは次のとおりです。SELECTCONCAT( 'TRUNCATE TABLE'、TABLE_NAME、 ';')FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'test' into outfile '/ tmp / truncate_test.sql';
次に、生成された.sqlスクリプトを現在のフォルダーにコピーします。mv/ tmp / truncate_test.sql $ current_dir /
次に、.sqlスクリプトを実行して、データベース内のすべてのテーブルのデータを削除します。source$ current_dir / truncate_test.sql
説明:
select ... into outfile ...操作では、デフォルトでは、ファイルのみをtmpパスに書き込むことができ、tmpフォルダーの下の.sqlスクリプトを現在のフォルダーに直接移動する必要はありません。 tmpパスの下で.sqlスクリプトを実行します。他のパスへの書き込みを行う場合は、mysqlデーモンに書き込み権限を付与する必要があります。最も簡単な方法は、/ etc / selinuxの下の構成構成ファイルでSELINUXを変更して、他のパスへの書き込みを無効にすることです。次に、ここでは説明を拡張しません。
mysqlデータベースのバックアップとリカバリに関する以前のブログ投稿と組み合わせて、小さなスクリプトのソースコードと実行中のスクリーンショットを以下に投稿します。このスクリプトを使用してデータをバックアップおよび復元する場合、ソースデータベースと宛先データベースのすべてのテーブルの構造に一貫性がなければなりません。一貫性がないと、実行が失敗する可能性があります。このスクリプトは、主にmysqlデータベースのバックアップとリカバリを実装し、データベース全体のすべてのテーブルデータを一度に削除し、データテーブル構造を保持します。
実行結果のスクリーンショット:
1):テストデータベース内のすべてのデータをバックアップします
2):データを復元する
3):データベーステストのすべてのテーブルのすべてのデータを削除し、テーブル構造を保持します
スクリプトソースコード:
#/bin/bash
while [ 1 ]
do
echo " #############################################"
echo " Quick Backup and Recovery"
echo " Source and Destination Mysql Must Be Same"
echo " #############################################"
echo " 1) Back up database test"
echo " 2) Recovery database test"
echo " 3) Clear data in database test"
echo " q) Quit"
echo -n " Your Option:"
read option_char
current_dir=$(pwd)
case ${option_char} in
"1")
rm -f $current_dir/test_bk.sql
mysqldump -t -c -uroot -proot test > $current_dir/test_backup.sql
echo " Database test already backup..."
;;
"2")
mysql -u root --password='root' -e "
use test
source $current_dir/test_backup.sql"
echo " Database test already recovery..."
;;
"3")
rm -f $current_dir/truncate_test.sql
chmod 777 $current_dir
mysql -u root --password='root' -e "
SELECT CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' into outfile '/tmp/truncate_test.sql';"
mv /tmp/truncate_test.sql $current_dir/
mysql -u root --password='root' -e "
use test
source $current_dir/truncate_test.sql"
echo " Clear data of test successful..."
;;
"q"|"quit"|"exit"|'Q'|"QUIT"|"Quit")
break
;;
*)
echo "your option is invalid, please input again..."
;;
esac
done