MySQL更新失败,并显示“您正在使用安全更新模式,并且您尝试在没有使用KEY列的WHERE的情况下更新表。

MySQL update fails with 'You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.'

提问人:yasee 提问时间:4/6/2023 最后编辑:yasee 更新时间:4/6/2023 访问量:402

问:

我一直从MySQL收到此错误消息

错误 1175 (HY000): 您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。

我使用的查询是这样的:

update custcopy set cust_contact=null where cust_id='1000000005';

我使用的MySQL信息是“Ver 8.0.32 for Win64 on x86_64 (MySQL Community Server - GPL)”。我访问的表的方案如下:

+--------------+-----------+------+-----+---------+-------+
| Field        | Type      | Null | Key | Default | Extra |
+--------------+-----------+------+-----+---------+-------+
| cust_id      | char(10)  | NO   |     | NULL    |       |
| cust_name    | char(50)  | NO   |     | NULL    |       |
| cust_address | char(50)  | YES  |     | NULL    |       |
| cust_city    | char(50)  | YES  |     | NULL    |       |
| cust_state   | char(5)   | YES  |     | NULL    |       |
| cust_zip     | char(10)  | YES  |     | NULL    |       |
| cust_country | char(50)  | YES  |     | NULL    |       |
| cust_contact | char(50)  | YES  |     | NULL    |       |
| cust_email   | char(255) | YES  |     | NULL    |       |
+--------------+-----------+------+-----+---------+-------+

我查阅了mysql文档,发现这个说法可能会有所帮助,但我不太明白为什么。

我需要一个不会导致该错误的查询,并且禁用SQL_SAFE_UPDATES不是一种选择。

MySQL 安全 SQL更新

评论

1赞 maio290 4/6/2023
这回答了你的问题吗?MySQL Workbench 中的 UPDATE 期间出现 MySQL 错误代码:1175
0赞 Bill Karwin 4/6/2023
还可以通过在 UPDATE 语句上使用 LIMIT 来临时解决安全更新限制。看看我对 stackoverflow.com/questions/75186791/ 的回答......该问题中的示例适用于 DELETE,但同样适用于 UPDATE。
1赞 Bill Karwin 4/6/2023
我还注意到您的 DESCRIBE 输出显示没有一列是关键列。您应该考虑为表定义一个键。如果您的密钥是 ,则无需解决它即可满足安全更新要求。cust_id
1赞 Barmar 4/6/2023
从逻辑上讲,应该是表的主键。这不仅会使警告静音,还会使查询更加高效。cust_id

答: 暂无答案