我有一张桌子
CREATE TABLE users (
id BIGSERIAL NOT NULL PRIMARY KEY,
created_at TIMESTAMP DEFAULT NOW()
);
Run Code Online (Sandbox Code Playgroud)
首先我跑
INSERT INTO users (id) VALUES (1);
Run Code Online (Sandbox Code Playgroud)
我跑完之后
INSERT INTO users (created_at) VALUES ('2016-11-10T09:37:59+00:00');
Run Code Online (Sandbox Code Playgroud)
我得到
错误:重复的键值违反了唯一约束“users_pkey”详细信息:键(id)=(1)已存在。
为什么我自己插入“id”时id序列没有增加?
这是因为只有当您省略子句中的列或插入特殊值DEFAULT时,才会计算该子句。SETDEFAULT
在您的第一个中INSERT,DEFAULT不会评估该子句,因此不会增加序列。第二个INSERT使用该DEFAULT子句,序列增加并返回值 1,该值与前一个中明确给出的值冲突INSERT。
不要将INSERTs 与使用序列的自动值创建和INSERT显式指定列的 s 混合在一起。或者,如果必须的话,您应该确保这些值不会发生冲突,例如,使用偶数作为自动生成的值,使用奇数作为显式生成的值INSERT。
| 归档时间: |
|
| 查看次数: |
3109 次 |
| 最近记录: |