Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果检测到问题,请稍后纠正。无论您选择什么隔离级别,以及您如何准确地更改表中的数据,都应使用(ListID,index)上的唯一索引强制执行最重要的约束-无重复项。唯一索引约束很容易实现,并且始终保持不变。删除记录时,降低Id大于已删除记录1的所有记录的I_Sql_Postgresql_Concurrency_Transactions_Acid - Fatal编程技术网

Sql 如果检测到问题,请稍后纠正。无论您选择什么隔离级别,以及您如何准确地更改表中的数据,都应使用(ListID,index)上的唯一索引强制执行最重要的约束-无重复项。唯一索引约束很容易实现,并且始终保持不变。删除记录时,降低Id大于已删除记录1的所有记录的I

Sql 如果检测到问题,请稍后纠正。无论您选择什么隔离级别,以及您如何准确地更改表中的数据,都应使用(ListID,index)上的唯一索引强制执行最重要的约束-无重复项。唯一索引约束很容易实现,并且始终保持不变。删除记录时,降低Id大于已删除记录1的所有记录的I,sql,postgresql,concurrency,transactions,acid,Sql,Postgresql,Concurrency,Transactions,Acid,如果检测到问题,请稍后纠正。无论您选择什么隔离级别,以及您如何准确地更改表中的数据,都应使用(ListID,index)上的唯一索引强制执行最重要的约束-无重复项。唯一索引约束很容易实现,并且始终保持不变。删除记录时,降低Id大于已删除记录1的所有记录的Id可能会在数据量较大时导致性能问题。我的建议是:。创建序列对象并将其用于新Id。不要对Id列进行“自动递增”,并使用序列手动管理它们。2.删除记录时,将Id大于已删除记录Id的记录的Id减少1。并在同一事务中将序列值减少1。3.使用“Read


如果检测到问题,请稍后纠正。

无论您选择什么隔离级别,以及您如何准确地更改表中的数据,都应使用
(ListID,index)
上的唯一索引强制执行最重要的约束-无重复项。唯一索引约束很容易实现,并且始终保持不变。删除记录时,降低Id大于已删除记录1的所有记录的Id可能会在数据量较大时导致性能问题。我的建议是:。创建序列对象并将其用于新Id。不要对Id列进行“自动递增”,并使用序列手动管理它们。2.删除记录时,将Id大于已删除记录Id的记录的Id减少1。并在同一事务中将序列值减少1。3.使用“Read uncommitted”类型作为隔离级别。我警告您,如果您在UI上使用Id进行操作,在删除记录时更新Id,将给您带来巨大的操作问题。因为,其他人可以编辑另一条记录,因为它同时具有更大的Id值。@Gurcan我需要Id是持久的/顺序独立的,并且更希望它们是UUID而不是整数。所以id和index是独立的列。增加/减少记录索引对我来说不是问题,因为一个列的项目数不应该超过10个。所以,在基本设计中看起来还可以。索引顺序机制可以是我建议的方式。你同意吗?使用选择条件作为某种“模拟约束”的想法很聪明,我没有想到。不幸的是,唯一索引无法工作,因为列不是完全唯一的。我在两个写操作中移动/删除它们(首先移动邻接项,然后移动/删除项本身),操作1将导致违反此索引取决于dbms。唯一键约束可能在事务结束时得到检查(请参阅:),那么移动不会有问题。否则,扩展建议的select语句以检测相同的索引但不同的ID。更新将被发送到前端实时wia websocket,并且由于主板仅限于约20个用户,因此我不希望多个用户同时移动同一张卡时发生大量冲突。另一方面,前端呈现/ui逻辑依赖于一致的索引顺序,重复的索引或间隙可能导致未定义的行为。保证后端的一致性,然后让前端意识到可能存在的不一致性,这似乎更为清晰。在这种情况下,“可序列化”可能是多余的。尝试使用“可重复读取”,但同时,在服务器端(而不是数据库端)实现一些逻辑,以序列化在同一块板上完成的操作。一种方法是为每个“当前活动”板构造一个对象,然后在该对象上使用synchronized来阻止用户同时访问,从而序列化操作。另一种(可能更好)方法是使用某种队列机制,将操作序列化并返回websocket上的反馈。
| id | listId | index | title | ... |
| id      | listId  | index | title    | ...
---------------------------------------------
| "item1" | "list1" | 0     | "title1" | ...
| "item2" | "list1" | 1     | "title2" | ...
| "item3" | "list1" | 2     | "title3" | ...
| "item4" | "list2" | 0     | "title4" | ...
| "item5" | "list2" | 1     | "title5" | ...