我创建了一个表
CREATE TABLE street (
id SERIAL PRIMARY KEY NOT NULL,
street_name CHAR (30) NOT NULL,
city_id INTEGER REFERENCES city,
building_number CHAR(10));
之后我插入一些数据:
INSERT INTO street (street_name, city_id) VALUES ('Sumskaya', 1);
数据添加时id = 1。然后我插入下一个数据
INSERT INTO street (street_name, city_id) VALUES ('Sumskaya', 10);
并获得错误
表“city”中不存在键(city_id)=(10)。
我更改了我的插入数据
INSERT INTO street (street_name, city_id) VALUES ('Sumskaya', 2);
并在表中获取id = 3的行。缺少Id = 2。为什么序列分配值3而不是2以及如何更改它?
答案 0 :(得分:2)
Serials内部使用序列。出于并发原因,序列不会回滚。他们只是向前迈进。想象一下,如果你有两个客户端同时插入。
我们希望id为1和3的值,而2只会被省略。还有别的东西,我们有问题。
如果你真的需要无间隙的nubering那么你必须使用一个单独的表和行锁,但是你不能有并发客户端插入....