【问题标题】:MySql UPDATE weird behaviorMySql UPDATE 奇怪的行为
【发布时间】:2010-12-07 09:46:21
【问题描述】:

我知道,这可能是我的一个愚蠢的错误。

我试图为所有帖子标题添加后缀,并为我博客中的所有帖子添加特定标签(博客是用于学习目的的自定义编码项目)。一旦这不起作用,我尝试使用 phpMyAdmin 手动更新它,但没有成功。

那么,为什么这不起作用:

UPDATE
    posts
SET
    title = 'myNewTitle',
    tags  = 'myStupidTag'
WHERE
    id = 1

我得到的只是来自 mysql 的 OK 状态,但有 0 行受到影响。但是,如果我在 SELECTWHERE 子句中使用相同的 ID,我会得到发布数据就好了。

我的查询有问题吗?

这是表格:

CREATE TABLE IF NOT EXISTS `posts` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(512) DEFAULT NULL,
  `link` varchar(512) DEFAULT NULL,
  `rating` tinyint(3) unsigned DEFAULT NULL,
  `html` text,
  `tags` varchar(512) DEFAULT NULL,
  `description` varchar(512) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=80 ;

【问题讨论】:

  • 也向我们展示UPDATE ... SELECT
  • 如果更新后有 0 行受影响,则表示没有数据需要更新,即标题和标签值已设置为 myNewTitle 和 myStupidTag
  • 继之前的 cmets 之后,您是否尝试过在 UPDATE 前后选择 ID 为 1 的行?正如 Mchl 所说,如果 UPDATE 语法正确,则 UPDATE 将返回 OK,如果没有更改任何行,则返回 0 行。也许您可以尝试为您的列使用不同的值...
  • 好吧……这更奇怪了……我又试了一次,它成功了。但是,我仍然收到 msg: 0 row(s) 影响。 (查询耗时 0.0015 秒),我在 db 中看到该行已实际更改。 UPDATE 查询是否不计算修改的行数?

标签: php mysql


【解决方案1】:

您确定 PHPMyAdmin 对您的 UPDATE 查询说 OK,尽管没有任何行受到影响?

您的 WHERE 子句是错误的 - ID 字段必须是大写的 - 而不是小写!

试试吧:

UPDATE posts
SET title = 'myNewTitle',
    tags = 'myStupidTag'
WHERE ID = 1

亲切的问候

编辑

错误 - 用户 ajreal 已经纠正了我!

但是:您的查询必须有效 - 我使用您的表格方案和一些随机生成的数据进行了尝试...

【讨论】:

  • 列不区分大小写,表区分大小写...所以,没关系
  • 好吧,我刚刚意识到它似乎在工作。我在我的问题 cmets 中发表了评论。不知道发生了什么。手动尝试时,我使用的是 mysql root 用户,他拥有所有权限。昨天我什至设法删除了一张桌子:)
【解决方案2】:

mysql 在列 windows 和 unix 上不区分大小写,试试

    select * from posts where ID=1

检查您的帖子表是否有数据

【讨论】:

  • 如果是区分大小写的问题,mysql 会抱怨Unknown column 'id' ... 或其他什么,而不是说“0 行已更新”
猜你喜欢
  • 1970-01-01
  • 2011-02-02
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
相关资源
最近更新 更多