【问题标题】:Cannot change NULL to 0 (MySQL Query)无法将 NULL 更改为 0(MySQL 查询)
【发布时间】:2020-04-07 09:19:01
【问题描述】:

MySQL 服务器版本:5.7.25-28-log - 源码分布

当我在 phpMyAdmin 中运行时,我得到 131 行

SELECT * FROM bookings WHERE newsletter = 0

当我在 phpMyAdmin 中运行时,我得到了 685 行

SELECT * FROM bookings WHERE newsletter is null

但是当我在 phpMyAdmin 中模拟这个查询时,我得到 0(零)行

UPDATE bookings SET newsletter = 0 WHERE newsletter is null

知道模拟失败的原因吗?

感谢任何人提供的任何东西

更新

这是运行查询模拟后的屏幕截图

【问题讨论】:

  • 请添加show create table bookings的输出
  • UPDATE 命令不会“获取”任何行,因此期望获取“0(零)行”以外的任何内容是荒谬的。你可能想说点别的。嗯,准确地解释你的问题是最重要的。显示您正在使用的工具的确切输出而不是试图描述它也可能会产生更好的结果。
  • @MikeNakis 我不使用 PhpMyAdmin,但其他类似的工具会报告更新的行数,我想这就是他的意思。
  • @Barmar 哦,我可以很容易地假设。但关键是 OP 必须使用更精确的语言,而不是依赖读者假设的东西。
  • “模拟”是什么意思? PhpMyAdmin 不模拟任何东西,它执行实际的数据库查询。

标签: mysql null


【解决方案1】:

我猜你的“模拟查询”在回滚事务中运行..

只是为了模拟查询/检查语法...

就像一场空跑

https://dbfiddle.uk/?rdbms=mysql_5.6&fiddle=548a364a40ac226ef847cc62630f373a

如果您单击“开始”,它可能会在不自动回滚的情况下运行您的查询

【讨论】:

  • 是的,模拟器就像一个空运行,所以我们可以在实际运行之前看到有多少行会受到影响,这是一个安全网,但我不明白为什么查询匹配零行, 当它应该匹配 685 行时
  • @user12534088,如果您尝试使用其他值,它返回的行数是否不同于 0 行?我不熟悉 phpAdmin.. 但如果您使用任何其他 odbc 客户端并进行回滚,它会显示 0 行已更新.. 如果您单击“开始”,它会更新行,不要吗?
  • 我担心在知道会发生什么之前点击Go,这就是我想先模拟它的原因
  • 它会起作用,请确保.. 受影响的 0 行预计会导致事务回滚.. 这是 phpAdmin 可以进行空运行的唯一方法...但是如果您害怕,你不能在暂存环境中运行它吗?
  • 我明白了,好的,我将创建一个数据库副本并测试它,谢谢
猜你喜欢
  • 2018-11-08
  • 2015-08-16
  • 1970-01-01
  • 2020-12-29
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多