当运行下面mysql
从一个码linux
( CentOS 7
) terminal
,下面的命令似乎是要求输入密码在循环的每个表。 有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 ;
验证该文件包含了你想要的东西。
然后,(其它无用的使用猫)管道将文件的内容到MySQL
cat myfile | mysql -u me -p --database mydatabase