gpt4 book ai didi

更新时 MySQL 错误 1157,但是我在 where 子句中使用主键

转载 作者:太空宇宙 更新时间:2023-11-03 11:23:43 25 4
gpt4 key购买 nike

我收到 1157 错误

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

当我尝试执行这条语句时

UPDATE ip 
SET
ip_countryCode = 'GB',
ip_countryName = 'United Kingdom',
ip_city = 'London'

WHERE BINARY ip_ip >= INET6_ATON('2.57.77.0') AND
BINARY ip_ip <= INET6_ATON('2.57.77.255');

这是ip表的创建表

CREATE TABLE `ip` (
`ip_ip` varbinary(16) NOT NULL,
`ip_last_request_time` timestamp(3) NULL DEFAULT NULL,
`ip_city` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT '',
`ip_countryCode` varchar(3) COLLATE utf8mb4_unicode_ci DEFAULT '',
`ip_countryName` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT '',
/*
more 23 columns have been omitted for readability
*/
PRIMARY KEY (`ip_ip`),
KEY `countryCode_index` (`ip_countryCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

我在这里做错了什么?为什么在 where 子句中使用了 Primary 键却出现此错误?

最佳答案

仅使用键列是不够的,您必须以允许使用索引查找行的方式使用它。来自documentation :

It is possible for UPDATE and DELETE statements to produce an error in safe-updates mode even with a key specified in the WHERE clause, if the optimizer decides not to use the index on the key column.

由于您测试的是 BINARY ip_ip 的值,而不仅仅是 ip_ip 本身,它不能使用索引,所以您得到了错误。

能否使用函数将 INET6_ATON() 的结果转换为 varbinary,而不是在列上使用 BINARY 运算符?然后它应该能够使用索引并且您不会收到错误。

UPDATE ip 
SET
ip_countryCode = 'GB',
ip_countryName = 'United Kingdom',
ip_city = 'London'

WHERE ip_ip BETWEEN CAST(INET6_ATON('2.57.77.0') AS BINARY(16)) AND
CAST(INET6_ATON('2.57.77.255') AS BINARY(16);

关于更新时 MySQL 错误 1157,但是我在 where 子句中使用主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56503092/

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