tldr:是否可以创建强制执行的约束:仅当列的当前值为 NULL 时才允许更新列。
当用户采取行动时,我正在使用 Postgresql 将列从 NULL 更新为外键。
理想情况下,它是这样工作的:
- 用户执行操作。
- 如果列是 NULL,做一堆东西并将该列更新为新的外键。否则,跳到 3。
- 使用该列中的外键做某事。
但是,两个用户可以同时执行该操作。在这种情况下,步骤 2 将发生两次,因为对于两个用户,在操作开始时,该列仍然为空。然后,稍微早一点的用户设置的外键以及依赖它的任何东西都会丢失。
如何确保第 2 步只发生一次?是否可以创建一个仅在当前值为空时才允许更新该列的约束?或者,在事务的最后,我应该检查列是否已经设置,然后在服务器级别处理它?