[英]Postgres SERIAL add value after error INSERT command
我創建了一張桌子
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,如何更改它?
序列號在內部使用序列。 由於並發原因,序列不會回滾。 他們只是前進。 想象一下,如果您有兩個客戶端同時插入。
我們期望id為1和3的值,而2會被忽略,除此之外還有其他問題。
如果您確實需要無間斷的核對,則必須使用單獨的表鎖和行鎖,但是您將無法插入並發客戶端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.