Mysql 如何在没有过多密码请求的情况下从终端循环

Mysql 如何在没有过多密码请求的情况下从终端循环,mysql,sql,linux,terminal,centos,Mysql,Sql,Linux,Terminal,Centos,从linux(CentOS 7)终端运行以下mysql代码时,以下命令似乎在询问循环中每个表的密码。有500多张桌子。对我来说,输入500多次密码是不合理的。如何修复下面的代码,使其只需输入密码几次 mysql -u root -p -Nse 'show tables' DATABASE_NAME | while read table; do mysql -u root -p -e "SET FOREIGN_KEY_CHECKS = 0; truncate table $table" DATAB

linux
CentOS 7
终端运行以下
mysql
代码时,以下命令似乎在询问循环中每个表的密码。有500多张桌子。对我来说,输入500多次密码是不合理的。如何修复下面的代码,使其只需输入密码几次

mysql -u root -p -Nse 'show tables' DATABASE_NAME | while read table; do mysql -u root -p -e "SET FOREIGN_KEY_CHECKS = 0; truncate table $table" DATABASE_NAME; done;  
编辑:


有没有一种方法不必在命令行日志中输入密码就可以做到这一点?

将密码放在p后面(没有空格),说你的密码是password

mysql -u root -pPASSWORD -Nse 'show tables' DATABASE_NAME | while read table; do mysql -u root -pPASSWORD -e "SET FOREIGN_KEY_CHECKS = 0; truncate table $table" DATABASE_NAME; done;

请考虑重新编写,以便它只使用两个数据库会话。一个用于生成要执行到文件中的语句列表,另一个(单个)用于处理这些语句。第一个查询会话可能会出错,所以我会小心地将它们分为两个任务

在第一个会话中,取消格式化,并将标准输出重定向到文件

SELECT 'set foreign_key_checks = 0;' AS stmt

SELECT CONCAT('TRUNCATE TABLE `',t.table_schema,'`.`',table_name,'`;') AS stmt
  FROM information_schema.tables t
 WHERE t.table_schema = 'mydatabase'
 ORDER BY t.table_name ;
验证该文件是否包含所需内容

然后(cat的另一个无用用法)将该文件的内容导入mysql

cat myfile | mysql -u me -p --database mydatabase

从技术上讲,这是可行的,但终端回答说,它自己也担心我的问题:
警告:在命令行界面上使用密码可能不安全。