sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-11-29 12:57:52 26 4
mua khóa gpt4 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 Câu trả lời

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

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

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

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

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

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com