我想知道在JOIN中依靠"relations": [
{
"type": "AllInOne",
"sentence": "…",
"arguments": [
{
"entities": [
{
"“text": "””",
"type": "entity1"
}
]
},
{
"entities": [
{
"“text": "””",
"type": "entity2"
}
]
},
{
"entities": [
{
"“text": "””",
"type": "\"entity..n”,"
}
]
},
{ "..." }
]
}
时的数据一致性。我将尝试举一个简单的例子:
交易1完成:
FOR UPDATE OF <table>
事务2在执行以下操作时非常紧密:
BEGIN;
SELECT 1 FROM a WHERE a.id = 5 FOR UPDATE;
UPDATE b SET val = 'other' WHERE b.a_id = 5;
COMMIT;
事务2是否有机会获得锁,但仍然获得过时的BEGIN;
SELECT b.val FROM a, b WHERE a.id = 5 AND b.a_id = 5 FOR UPDATE OF a;
[...]
?锁位于b.val
的行上–在从a
检索行之前,它是否等待该锁?
答案 0 :(得分:0)
对该问题的评论证实了我的怀疑-该锁不会延迟从其他表中检索其他行。这是一个非常具体的场景,但是我欢迎提供信息性的答案,以显示实现此目的的简单方法。我最终将第二个SELECT拆分为两个查询-第一个SELECT获取锁,然后第二个SELECT检索b
行,确保它们被更新。