如何在更新后检查值是否已更改?

时间:2014-03-11 12:36:06

标签: mysql sql perl sql-update

假设我做了类似以下的事情:

my $rows = $dbh->do("UPDATE MYTABLE SET amount=1200 WHERE id =123"); 

即使金额已经 1200,$rows也会返回1.因此,它被视为更新的行。
我的问题是:除了在更新之前进行查询之外,有没有办法检查更新是否实际更改了行中的值?

3 个答案:

答案 0 :(得分:9)

将SQL查询更改为:

UPDATE MYTABLE SET amount=1200 WHERE id = 123 AND amount <> 1200

该表将是相同的,但它返回实际更改的行数。

答案 1 :(得分:1)

Twinkles答案是正确的,但您应该使用prepare创建一个语句句柄,然后使用execute大多数数据库查询。

在这种情况下,你会写

my $update_if_changed = $dbh->prepare('UPDATE mytable SET amount = ? WHERE id = ? AND amount != ?')

随后

$update_if_changed->execute($amount, $id, $amount)

答案 2 :(得分:1)

默认情况下,DBD::mysql会返回UPDATE匹配的行数,而不是物理更改的行数。您可以通过在connect

的通话中停用mysql_client_found_rows来更改此行为
my $dsn = "DBI:mysql:;mysql_client_found_rows=0";
my $dbh = DBI->connect($dsn, $user, $password);
相关问题