数据没有变化时是否需要更新

问题描述 投票:0回答:3

我想更新表中的一行,更新前是否需要检查每一列是否有变化?

mysql sql database sql-update
3个回答
5
投票

在MySQL中,您不需要检查该值。如果没有变化,MySQL 不会更新记录。这意味着 MySQL 不会产生记录或写入数据的开销。检查是否有任何值发生更改会产生轻微的成本,并且我认为它确实会运行触发器。

其他数据库的行为有所不同。

这是文档中一个神秘的位置,其中描述了

mysql_affected_rows()

对于 UPDATE 语句,默认情况下受影响的行值是 实际更改的行数。

。 。 。

大于零的整数表示受影响的行数或 检索到。零表示没有针对 UPDATE 更新任何记录 语句中,没有行与查询中的 WHERE 子句匹配,或者没有 查询尚未执行。


0
投票

这完全取决于你事先检查里面是否有东西。您可以基于单行、多行或全部进行更新。

更新特定行的示例如下:

UPDATE your_table
SET Username='TestName123'
WHERE UserID='12486';

您将在其中更改用户名,其中 userid 为 12486

或者您可以使用您想要的数据更新所有行

UPDATE Customers
SET Country='USA'

这将更新每条记录,使“国家/地区”列填写为“美国”。


0
投票

如果没有数据更改,mysql 不会更新实际行。

证明:

create temporary table test (id int not null, value int default null, PRIMARY KEY (`id`));
insert into test (id, value) values (1,1),(2,2);

-- no-change update
update test set value = 2 where id = 2;
select row_count();
> "mysql -vvv" rows_affected output: Query OK, 0 rows affected (0.01 sec)
> mysql output: Rows matched: 1  Changed: 0  Warnings: 0
> row_count: 0

-- has-change update
update test set value = 3 where id = 2;
select row_count();
> "mysql -vvv" rows_affected output: Query OK, 1 row affected (0.01 sec)
> mysql output: Rows matched: 1  Changed: 1  Warnings: 0
> row_count: 1

I believe: row_count = rows_affected = "Changed"

mysql_rows_affected 链接很有帮助,但没有明确声明如果没有数据更改,该行将不会更新。它仅声明如果该行与 UPDATE 的 WHERE 子句不匹配,则不会更新该行。

https://dev.mysql.com/doc/c-api/5.7/en/mysql-affected-rows.html

© www.soinside.com 2019 - 2024. All rights reserved.