次のコードを検討してください。
mysql -u root -p << MYSQL
drop user '${test}'@'localhost';
drop database ${test};
create user '${test}'@'localhost' identified by '${psw}';
create database ${test};
GRANT ALL PRIVILEGES ON ${test}.* TO ${test}@localhost;
MYSQL
最初のコマンドの場合、コードは次のエラーを出力しますdrop user '${test}'@'localhost';
。
エラー1396(HY000): "${test}"@"localhost"のDROP USER操作が失敗しました。
私の質問
このエラーが発生した場合に実行が中断されないように、プログラムがそれを無視するようにするにはどうすればよいですか。
たとえば、プログラムを次のように実行するにはどうすればよいですか?
「すでにユーザーがいる場合は
${test}
削除し、存在しない場合は新規作成してください。」
もちろん、データベースインスタンスを処理する2番目のdropコマンドにも同じ問題があります。
答え1
使用IF EXISTS
お尻:
DROP USER IF EXISTS '${test}'@'localhost';
存在しないアカウントを削除しようとするとエラーが発生します。この句が指定されると、
IF EXISTS
ステートメントは存在しない指定された各ユーザーに対してエラーではなく警告を生成します。
答え2
あなたもできますmysql
ツールを強制的に使用するすべてのコマンドのエラーを無視します。
スクリプトの一部のステートメントでエラーが発生してもスクリプトを実行し続けるには、
--force
コマンドラインオプションを使用する必要があります。
つまりmysql --force -u root -p << ...