无法从终端设置外键检查 =0
unable to set foreign key checks =0 from terminal
我正在尝试从 linux (CentOS 7) 终端 运行 以下代码:
mysql -u root -p -e "SET FOREIGN_KEY_CHECKS = 0"; mysql -u root -p -Nse 'show tables' DATABASE_NAME -u root -p| while read table; do mysql -u root -p -e "truncate table $table" DATABASE_NAME; done;
但它显然不处理设置外键检查命令,因为作为响应我得到:
ERROR 1701 (42000) at line 1: Cannot truncate a table referenced in a foreign key constraint (`atest`.`PARTICIPANT_2`, CONSTRAINT `FK_0a036647645f4e5e950470cb2dc` FOREIGN KEY (`PARTICIPANT_ACT_HJID`) REFERENCES `atest`.`ACT` (`HJID`))
此外,它继续询问我的密码。我希望它会询问 3 次密码,但不会一次又一次地重复这三个请求。我怎样才能更改我上面的代码以正确地将其设置为 运行,并且密码请求次数最少?
编辑:
以下修改似乎要求循环中每个 table 的密码。有 500+ tables。我该如何解决这个问题,让它只要求输入密码几次?
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" atest; done;
foreign_key_checks
是一个会话变量,它只对当前会话有效,直到它被改变,或者直到会话结束。
您正在创建多个数据库会话,每个新会话都以它自己的 foreign_key_checks
变量开始,设置为默认值(继承自全局设置)。 (我不会提及如何更改默认值,因为您真的不想去那里。)
一种选择是在 与 TRUNCATE TABLE
语句相同的 会话中执行 SET FOREIGN_KEY_CHECKS
语句。
使用分号作为语句分隔符。作为 运行 两个语句的演示:
mysql -u me -pXX -e "show variables like 'foreign%'; show variables like '%packet%';"
我正在尝试从 linux (CentOS 7) 终端 运行 以下代码:
mysql -u root -p -e "SET FOREIGN_KEY_CHECKS = 0"; mysql -u root -p -Nse 'show tables' DATABASE_NAME -u root -p| while read table; do mysql -u root -p -e "truncate table $table" DATABASE_NAME; done;
但它显然不处理设置外键检查命令,因为作为响应我得到:
ERROR 1701 (42000) at line 1: Cannot truncate a table referenced in a foreign key constraint (`atest`.`PARTICIPANT_2`, CONSTRAINT `FK_0a036647645f4e5e950470cb2dc` FOREIGN KEY (`PARTICIPANT_ACT_HJID`) REFERENCES `atest`.`ACT` (`HJID`))
此外,它继续询问我的密码。我希望它会询问 3 次密码,但不会一次又一次地重复这三个请求。我怎样才能更改我上面的代码以正确地将其设置为 运行,并且密码请求次数最少?
编辑:
以下修改似乎要求循环中每个 table 的密码。有 500+ tables。我该如何解决这个问题,让它只要求输入密码几次?
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" atest; done;
foreign_key_checks
是一个会话变量,它只对当前会话有效,直到它被改变,或者直到会话结束。
您正在创建多个数据库会话,每个新会话都以它自己的 foreign_key_checks
变量开始,设置为默认值(继承自全局设置)。 (我不会提及如何更改默认值,因为您真的不想去那里。)
一种选择是在 与 TRUNCATE TABLE
语句相同的 会话中执行 SET FOREIGN_KEY_CHECKS
语句。
使用分号作为语句分隔符。作为 运行 两个语句的演示:
mysql -u me -pXX -e "show variables like 'foreign%'; show variables like '%packet%';"