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

会计师

我收到 1157 错误

错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。要禁用安全模式,请切换首选项 -> SQL 编辑器中的选项并重新连接。

当我尝试执行此语句时

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 子句中使用键?

巴马

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

如果优化器决定不使用键列上的索引,即使在 WHERE 子句中指定了键,UPDATE 和 DELETE 语句也可能在安全更新模式下产生错误。

由于您正在测试的值BINARY ip_ip而不仅仅是ip_ip它本身,因此它无法使用索引,因此您会收到错误消息。

您可以使用函数将结果转换为INET6_ATON()to 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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL安全模式错误,即使在where子句中使用主键时也是如此

来自分类Dev

在WHERE子句中使用<>(不相等)时,MySQL查询传递错误的结果

来自分类Dev

在MySQL的where子句中使用多个表更新查询

来自分类Dev

MySQL-在where语句中使用<>时出现语法错误(插入)

来自分类Dev

在where子句中使用CASE时出现语法错误

来自分类Dev

在 where 子句中使用 json_extract_path_text() 函数时出现 Json 解析错误

来自分类Dev

WHERE子句中的mysql错误

来自分类Dev

我的SQL查询:错误:在WHERE子句中使用CASE WHEN时,字段列表中的未知列

来自分类Dev

在Where子句中使用Mysql变量

来自分类Dev

MYSQL在WHERE子句中使用别名

来自分类Dev

在 WHERE 子句中使用 MySQL 变量

来自分类Dev

if else 在 mysql where 子句中使用

来自分类Dev

MySQL错误:HAVING子句中使用了非分组字段

来自分类Dev

使用MySQL和Java的where子句中的未知列错误

来自分类Dev

WHERE子句中的MySQL陈述式错误

来自分类Dev

python mysql where子句中的错误

来自分类Dev

使用where函数在我的mysql查询上进行数学运算时出现语法错误

来自分类Dev

我在子查询 MySQL 的 Where 子句中使用 NOT IN 和 IF 是否正确?

来自分类Dev

在where子句中使用sleep()时,MySQL查询花费的时间太长

来自分类Dev

在MySQL查询的LIMIT子句中使用占位符时,PHP PDO错误

来自分类Dev

使用包含时 where 子句中的未知列错误

来自分类Dev

在WHERE子句中使用SQL VIEW(错误)

来自分类Dev

在 WHERE 子句中使用 AND 和 OR 条件得到错误的结果

来自分类Dev

在MS Access Update语句的WHERE子句中使用替换功能时,获取数据类型不匹配错误

来自分类Dev

在 MySQL 中使用左连接时尝试更新表会出现语法错误

来自分类Dev

如何在WHERE子句中使用MySql MAX()

来自分类Dev

是否可以在MySQL的where子句中使用当前的Dayname?

来自分类Dev

可以在WHERE子句中使用MySQL临时变量吗?

来自分类Dev

在MySQL预准备语句的WHERE子句中使用通配符

Related 相关文章

  1. 1

    MySQL安全模式错误,即使在where子句中使用主键时也是如此

  2. 2

    在WHERE子句中使用<>(不相等)时,MySQL查询传递错误的结果

  3. 3

    在MySQL的where子句中使用多个表更新查询

  4. 4

    MySQL-在where语句中使用<>时出现语法错误(插入)

  5. 5

    在where子句中使用CASE时出现语法错误

  6. 6

    在 where 子句中使用 json_extract_path_text() 函数时出现 Json 解析错误

  7. 7

    WHERE子句中的mysql错误

  8. 8

    我的SQL查询:错误:在WHERE子句中使用CASE WHEN时,字段列表中的未知列

  9. 9

    在Where子句中使用Mysql变量

  10. 10

    MYSQL在WHERE子句中使用别名

  11. 11

    在 WHERE 子句中使用 MySQL 变量

  12. 12

    if else 在 mysql where 子句中使用

  13. 13

    MySQL错误:HAVING子句中使用了非分组字段

  14. 14

    使用MySQL和Java的where子句中的未知列错误

  15. 15

    WHERE子句中的MySQL陈述式错误

  16. 16

    python mysql where子句中的错误

  17. 17

    使用where函数在我的mysql查询上进行数学运算时出现语法错误

  18. 18

    我在子查询 MySQL 的 Where 子句中使用 NOT IN 和 IF 是否正确?

  19. 19

    在where子句中使用sleep()时,MySQL查询花费的时间太长

  20. 20

    在MySQL查询的LIMIT子句中使用占位符时,PHP PDO错误

  21. 21

    使用包含时 where 子句中的未知列错误

  22. 22

    在WHERE子句中使用SQL VIEW(错误)

  23. 23

    在 WHERE 子句中使用 AND 和 OR 条件得到错误的结果

  24. 24

    在MS Access Update语句的WHERE子句中使用替换功能时,获取数据类型不匹配错误

  25. 25

    在 MySQL 中使用左连接时尝试更新表会出现语法错误

  26. 26

    如何在WHERE子句中使用MySql MAX()

  27. 27

    是否可以在MySQL的where子句中使用当前的Dayname?

  28. 28

    可以在WHERE子句中使用MySQL临时变量吗?

  29. 29

    在MySQL预准备语句的WHERE子句中使用通配符

热门标签

归档