簡體   English   中英

錯誤INSERT命令后的Postgres SERIAL加值

[英]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,如何更改它?

序列號在內部使用序列。 由於並發原因,序列不會回滾。 他們只是前進。 想象一下,如果您有兩個客戶端同時插入。

  • 客戶端1插入一行,然后繼續執行其他一些工作。
  • 客戶端2插入一行,繼續執行其他工作
  • 客戶端1提交。
  • 客戶端1插入另一行,繼續執行其他工作
  • 客戶端2錯誤並回滾。

我們期望id為1和3的值,而2會被忽略,除此之外還有其他問題。

如果您確實需要無間斷的核對,則必須使用單獨的表鎖和行鎖,但是您將無法插入並發客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM