【发布时间】:2019-10-23 11:29:37
【问题描述】:
我收到 1157 错误
错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。 要禁用安全模式,请切换 Preferences -> SQL Editor 中的选项并重新连接。
当我尝试执行这条语句时
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 键?
【问题讨论】:
-
只是一个猜测 - 也许
BINARY关键字被认为是一个函数,因此 WHERE 子句不直接使用主键,而是使用从主键派生的一组值。 -
@schtever 嗯,谢谢,有道理
标签: mysql