【问题标题】:Why does MySQL think that I'm not using a WHERE statement?为什么 MySQL 认为我没有使用 WHERE 语句?
【发布时间】:2015-01-06 04:51:24
【问题描述】:

我正在尝试在名为 premier_products 的数据库中更新名为 rep 的表。该表的主键是rep_num

当我运行以下语句时:

update rep 
set last_name = "Perry"
where rep_num = 85;

我收到一条错误消息,提示“您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。”

我在 Google 上搜索了该错误消息,大多数回复都类似于“您必须使用 where 子句或关闭安全模式”。但正如您所见,我 am 使用了 where 子句。如果我有 where 子句,为什么会出现错误?

MySQL 服务器版本 5.6.20。

这张图片显示 rep_num 绝对是我的主键:

这张图片显示了当前的代表表:

【问题讨论】:

  • rep_num 可能未编入索引。要么给它一个,要么在工作台中更改您的设置以消除该限制。
  • 您确定rep_num 是主键吗?您的表创建脚本是什么样的?
  • @John - 未编入索引是什么意思?这是一张桌子的图片,如果有帮助的话:i.imgur.com/TSyZ6AX.png
  • @Pikamander2:这是它的数据。它的结构是什么?
  • @Pikamander2:不,MySQL 服务器

标签: mysql mysql-workbench


【解决方案1】:

虽然您只保存数字,但您的主键类型是 char(2) 而不是 tinyint(2),并且当您更新记录时,您提供的是 numerical 值而不是 char 在你的 where 条件下的值。我认为这就是索引机制触发错误并告诉您,您的 where 条件不安全或可能产生错误结果的地方。

在你的情况下尝试

update rep 
set last_name = "Perry"
where rep_num = '85';

PS:你为什么不用前缀来命名你的表呢?像 tbl_rep?只是一个想法。

【讨论】:

  • 谢谢,解决了。这是家庭作业的一部分,所以我无法控制名称。
猜你喜欢
  • 1970-01-01
  • 2013-03-09
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多