gpt4 book ai didi

perl - DBD::SQLite:插入或更新-问题

转载 作者:行者123 更新时间:2023-12-03 17:45:54 26 4
gpt4 key购买 nike

在写我的问题时(如何:插入一个新条目,如果已​​经存在,请更新它),我在Related Questions中找到了一些答案:

$sql = "INSERT OR REPLACE INTO $table ( Id, Name, Rating ) VALUES( ?, ?, ? )";
$sth_rating = $dbh->prepare( $sql );
$sth_rating->execute( $id, $name, $rating );




$sql = "INSERT OR IGNORE INTO $table ( Id, Name, Rating ) VALUES ( ?, ?, ? )";
$sth_rating = $dbh->prepare( $sql );
$sth_rating->execute( $id, $name, $rating );

$sql = "UPDATE $table SET Rating = ? WHERE Id = ?";
$sth_rating = $dbh->prepare( $sql );
$sth_rating->execute( $rating, $id );


第二种方法比第一种更安全吗?

最佳答案

第二种方法不太安全,因为它是非原子的。换句话说,它发生在一个以上的步骤中。考虑两个都更新相同数据的过程。时间在减少。

Process 1                      Process 2

INSERT OR IGNORE...
INSERT OR IGNORE...
UPDATE...
UPDATE...


进程1首先开始,但是进程2潜入并在其间进行更新。然后,过程1即将结束过程2的更新。

在这种特殊情况下,这并不算太糟糕,无论如何,两个过程都将相互影响,但是通过扩展技术,您很容易陷入麻烦。

(除非我误解了这个问题,而您想要的是 upsert

关于perl - DBD::SQLite:插入或更新-问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5960456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com