MySQL。为什么我不能只更新一列?

标签 mysql

我有 table :

CREATE TABLE `cold_water_volume_value` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `parameter_value_id` int(11) NOT NULL,
  `time` timestamp(4) NOT NULL DEFAULT CURRENT_TIMESTAMP(4) ON UPDATE CURRENT_TIMESTAMP(4),
  `value` double NOT NULL,
  `device_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_cold_water_volume_value_id_device_time` (`parameter_value_id`,`device_id`,`time`),
  KEY `idx_cold_water_volume_value_id_time` (`parameter_value_id`,`time`),
  KEY `fk_cold_water_volume_value_device_id_idx` (`device_id`),
  CONSTRAINT `fk_cold_water_volume_value_device_id` FOREIGN KEY (`device_id`) REFERENCES `device` (`id`) ON UPDATE SET NULL,
  CONSTRAINT `fk_cold_water_volume_value_id` FOREIGN KEY (`parameter_value_id`) REFERENCES `cold_water_volume_parameter` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=684740 DEFAULT CHARSET=utf8;

所有行都有device_id = NULL。我想通过脚本更新它:

UPDATE cold_water_volume_value SET device_id = 130101 WHERE parameter_value_id = 2120101;

但是,它不会将所选 parameter_value_id 的所有 device_id 从 null 替换为给定值,而是设置 timevalue 的所有内容 列到 now () 和一些(看起来与之前的值完全随机的)数字。

为什么会发生这种情况,以及如何正确地做到这一点?

最佳答案

时间会根据您的架构自动更新。

`time` timestamp(4) NOT NULL DEFAULT CURRENT_TIMESTAMP(4) ON UPDATE CURRENT_TIMESTAMP(4)
                                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

要解决这个问题,您可以在更新中将时间设置为自身。

UPDATE cold_water_volume_value
  SET device_id = 130101, time = time
  WHERE parameter_value_id = 2120101;

但这可能会跟踪上次更新行的时间。如果是这样,它就按预期工作了,让它继续做它的事情。

至于value,它可能有一个更新触发器。检查显示触发器并查找该表上的触发器。

关于MySQL。为什么我不能只更新一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350321/

相关文章:

mysql - 尝试访问我的 ruby​​ 项目 - 与 mysql 有关的 LoadError

php - MySQL 查询,它可以让我在我的 html 表中显示列表的作者

mysql - 使用按另一个列值分组更新列值

C# MySQL 插入

MySQL 根据 DISTINCT 值对多行进行分组

php - 使用 PHP 和 MySQL 查询连接两个表并对数据数组进行排序

mysql - "ADD AUTO_INCREMENT value"在 phpMyAdmin 中是什么意思

php - 如何获取并显示 sql 表中某个字段的所有值?

MySQL 方法 SUM()

mysql - JDBC SQL 别名不起作用