【发布时间】:2015-08-10 05:17:13
【问题描述】:
我想在我的表中得到这个结果contacts:
|contact_id | user_id | user_contact_id |
+-----------+------------------+----------------------+
| 1 | 1 | 1 |
+-----------+------------------+----------------------+
| 2 | 1 | 2 |
+-----------+------------------+----------------------+
| 3 | 1 | 3 |
+-----------+------------------+----------------------+
| 4 | 2 | 1 |
+-----------+------------------+----------------------+
| 5 | 2 | 2 |
+-----------+------------------+----------------------+
| 6 | 2 | 3 |
+-----------+------------------+----------------------+
| 7 | 3 | 1 |
+-----------+------------------+----------------------+
我将只插入user_id。
INSERT INTO contacts (user_id) VALUES ($user_id);
contact_id 将自动递增,因为它是 serial。我希望user_contact_id 也由数据库本身自动填充,因此它在并发写入时是 100% 稳定的。
【问题讨论】:
-
user_contact_id的值是不是一直从1到3算? -
跟进上一个相关问题。 stackoverflow.com/questions/30469032/…
-
由于并发问题,这并非微不足道。你需要非常精确。请澄清在您的问题中:您的 Postgres 版本?
(user_id, user_contact_id)必须是唯一的还是偶尔被骗的可以 - 可以通过contact_id来区分。 (会使它很多更简单。)如何处理由于DELETE和/或UPDATE而导致的user_contact_id中的空白,或者它是仅INSERT?序列中的间隙可以吗?您知道在并发负载下,serial列中会出现预期的空白,对吧?这个用例是 few 还是 many 用户? -
@ErwinBrandstetter : 我使用的是 Postgres 9.4.1,骗子不是借口,我需要一个严格的阵容,因为我要结合 user_id 使用contact_user_id,所以它必须始终是唯一的
-
我是否正确阅读了您的简短评论:您不会进一步澄清您的问题吗?
标签: sql postgresql concurrency auto-increment sql-insert