我想更新表中的一行,更新前是否需要检查每一列是否有变化?
在MySQL中,您不需要检查该值。如果没有变化,MySQL 不会更新记录。这意味着 MySQL 不会产生记录或写入数据的开销。检查是否有任何值发生更改会产生轻微的成本,并且我认为它确实会运行触发器。
其他数据库的行为有所不同。
mysql_affected_rows()
:
对于 UPDATE 语句,默认情况下受影响的行值是 实际更改的行数。
。 。 。
大于零的整数表示受影响的行数或 检索到。零表示没有针对 UPDATE 更新任何记录 语句中,没有行与查询中的 WHERE 子句匹配,或者没有 查询尚未执行。
这完全取决于你事先检查里面是否有东西。您可以基于单行、多行或全部进行更新。
更新特定行的示例如下:
UPDATE your_table
SET Username='TestName123'
WHERE UserID='12486';
您将在其中更改用户名,其中 userid 为 12486
或者您可以使用您想要的数据更新所有行
UPDATE Customers
SET Country='USA'
这将更新每条记录,使“国家/地区”列填写为“美国”。
如果没有数据更改,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