Postgresql postgres选择更新查询含义
以下查询在postgres中意味着什么。我知道这是关于锁的事,但有人可以请你进来Postgresql postgres选择更新查询含义,postgresql,Postgresql,以下查询在postgres中意味着什么。我知道这是关于锁的事,但有人可以请你进来 select col1, col2 from table where col1=123 for update; 实际上我有一张像这样的桌子 id col1 col2 receipt_id receipt_year 1 ddd ggg 1 2018 2 ddd eee 2 2018 我需要每年将收据id重置为1。i、 e 2017年1月、20
select col1, col2 from table where col1=123 for update;
实际上我有一张像这样的桌子
id col1 col2 receipt_id receipt_year
1 ddd ggg 1 2018
2 ddd eee 2 2018
我需要每年将收据id重置为1。i、 e 2017年1月、2018年1月等。
我正在使用查询
select max(receipt_id) from table where receipt_year=$current_year;
然后,如果找到了id,我将其添加1,否则我将其设置为1
这是正确的方法吗
id col1 col2 receipt_id receipt_year
1 ddd ggg 1 2018
2 ddd eee 2 2018
2019年:
id col1 col2 receipt_id receipt_year
1 ddd ggg 1 2018
2 ddd eee 2 2018
3 lol lpl 1 2019
目前我是这样做的:
$current_year = date('Y');
$sql = SELECT MAX(receipt_id) AS receipt_id FROM table WHERE receipt_year=:year;
$stmt = $conn->prepare($sql);
$stmt->execute(array(':year' => $current_year));
$receipt_ido = $stmt->fetchColumn();
if ( ! empty($receipt_ido)) {
$receipt_id = ($receipt_ido + 1);
} else {
$receipt_id = 1;
}
这使得FOR UPDATE
子句的作用非常明确:
FOR UPDATE导致SELECT语句检索到的行被锁定,就像FOR UPDATE一样。这可以防止它们被其他事务修改或删除,直到当前事务结束。也就是说,尝试更新、删除或选择更新这些行的其他事务将被阻止,直到当前事务结束
另外,FOR UPDATE
将等待另一个在记录上具有更新锁的事务在开始之前完成
在更简单的语言中,FOR UPDATE
标记在SELECT
的末尾,确保选择将完成,而不会与选择同时发生任何更新。这意味着您的select将返回数据的准确快照,而不可能从记录中获取中间数据。说明了FOR UPDATE
子句的作用:
FOR UPDATE导致SELECT语句检索到的行被锁定,就像FOR UPDATE一样。这可以防止它们被其他事务修改或删除,直到当前事务结束。也就是说,尝试更新、删除或选择更新这些行的其他事务将被阻止,直到当前事务结束
另外,FOR UPDATE
将等待另一个在记录上具有更新锁的事务在开始之前完成
在更简单的语言中,
FOR UPDATE
标记在SELECT
的末尾,确保选择将完成,而不会与选择同时发生任何更新。这意味着您的选择将返回数据的准确快照,而不可能从记录中获取中间数据。编辑您的问题并向我们显示更多的样本数据行。然后,向我们展示输出应该是什么。您的语言不清楚(至少我不清楚)。请在重置收据id
之前和之后向我们展示表格。我建议您提出一个新问题。除了我之外,没有人会看到这个帖子。请编辑您的问题并向我们展示更多的示例数据行。然后,向我们展示输出应该是什么。您的语言不清楚(至少我不清楚)。请在重置收据id
之前和之后向我们展示表格。我建议您提出一个新问题。除了我,没有人会看到这条线。