gpt4 book ai didi

sql - 如何使用 DBIx::Class 增加一列?

转载 作者:行者123 更新时间:2023-12-04 15:33:45 25 4
gpt4 key购买 nike

我正在尝试将一些原始 DBI 调用转换为 DBIx::Class。我偶尔会遇到类似的事情:

UPDATE 'foo' SET bar = bar + 1 WHERE ...

有没有办法让 DBIx::Class 完全执行这种查询?我不想做这样的事情:
$row->update({ bar => $row->bar() + 1 });

因为如果多个进程试图做同样的事情,就会出现竞争条件。

我可以通过在数据库级别进行某种锁定来解决这个问题,但这对我来说似乎比仅使用原始查询更糟糕。基本上我只想知道是否有一种干净的方法可以使用 DBIC 来做到这一点,或者我是否应该继续在这里使用原始 DBI 调用。

最佳答案

使用@ThisSuitIsBlackNot 评论中的解决方案,但替换 update_allupdate :

$rs->search(...)->update({
bar => \'bar + 1',
});

这将导致单个 UPDATE 语句。 (解释: update_all 通过在 ResultSet 中的每一行上调用 update 来工作,包括 DBIC 触发器之类的东西,所以它必须首先获取行。在 ResultSet 上的 update 执行准系统 SQL 更新。)

关于sql - 如何使用 DBIx::Class 增加一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807431/

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