gpt4 book ai didi

sql - 错误 INSERT 命令后 Postgres SERIAL 添加值

转载 作者:行者123 更新时间:2023-11-29 12:57:52 25 4
gpt4 key购买 nike

我创建了一个表

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);

得到错误

Key (city_id)=(10) is not present in table "city".

我改变了我的插入数据

INSERT INTO street (street_name, city_id) VALUES ('Sumskaya', 2);

并在表中获取 id = 3 的行。缺少 id = 2。为什么 serial 分配的值是 3,而不是 2 以及如何更改它?

最佳答案

连续剧在内部使用序列。出于并发原因,序列不会回滚。他们只是向前走。想象一下,如果您有两个客户端同时插入。

  • 客户端 1 插入一行,继续做一些其他工作。
  • 客户端 2 插入一行,继续做一些其他工作
  • 客户端 1 提交。
  • 客户端 1 插入另一行,继续做一些其他工作
  • 客户端 2 错误并回滚。

我们期望 id 为 1 和 3 的值,而 2 只是被省略了。任何其他我们都会遇到问题。

如果你真的需要无缝的 nubering 那么你必须使用一个单独的表和行锁,但是你不能让并发客户端插入....

关于sql - 错误 INSERT 命令后 Postgres SERIAL 添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38420773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com