gpt4 book ai didi

mysql - 无法从终端设置外键检查 =0

转载 作者:太空宇宙 更新时间:2023-11-04 09:34:40 24 4
gpt4 key购买 nike

我正在尝试从 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 次密码,但不会一次又一次地重复这三个请求。我如何更改上面的代码以使其正确运行,并且密码请求次数最少?

编辑:

以下修改似乎要求循环中每个表的密码。有 500 多张 table 。我该如何解决这个问题,让它只要求输入密码几次?

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 是一个 session 变量,它只对当前 session 有效,直到它被改变,或者直到 session 结束。

您正在创建多个数据库 session ,每个新 session 都以它自己的 foreign_key_checks 变量开始,设置为默认值(继承自全局设置)。 (我不会提及如何更改默认值,因为您真的不想去那里。)

一个选项是在 相同 session 中执行 SET FOREIGN_KEY_CHECKS 语句作为 TRUNCATE TABLE 语句。

使用分号作为语句分隔符。作为运行两条语句的演示:

mysql -u me -pXX -e "show variables like 'foreign%'; show variables like '%packet%';"

关于mysql - 无法从终端设置外键检查 =0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27933446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com