gpt4 book ai didi

mysql - 从数据库中删除项目但保留唯一ID

转载 作者:行者123 更新时间:2023-11-29 14:09:55 28 4
gpt4 key购买 nike

我是数据库新手。我有一个 SQL 数据库,看起来有点像这样:

BEGIN;
CREATE TABLE "country" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(255) NOT NULL
)
;
CREATE TABLE "location" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(255) NOT NULL,
"coordinate" varchar(255) NOT NULL,
"country_id" integer NOT NULL REFERENCES "country" ("id")
)
;
CREATE TABLE "item" (
"id" integer NOT NULL PRIMARY KEY,
"title" varchar(25) NOT NULL,
"description" text NOT NULL,
"date" datetime NOT NULL,
"source" varchar(255) NOT NULL,
"link" varchar(255) NOT NULL,
"location_id" integer NOT NULL REFERENCES "location" ("id")
)
;

如果我从数据库中删除 item 条目,然后向数据库添加新的 item 条目,则 items 主键会发生什么情况?我的意思是,它会增加,还是会填补任何空白?

在我的情况下,我无法将数据库中不需要的条目保留为“active=no”条目,我需要完全删除它们,但我担心它会弄乱项目上的主键。

最佳答案

相对较少的应用实际上需要无间隙序列。大多数需要无间隙序列的应用程序都与会计有关。如果发票是连续编号的,审计员希望对所有发票进行说明,而您无法通过间隙序列来做到这一点。 (如果发票号30445无法出示,是因为它放错地方了,还是因为它根本不存在,还是因为有人输入了欺诈发票?)

在 SQL 数据库中,不仅是 MySQL,也不仅仅是 PostgreSQL,dbms 生成的序列(自动增量、序列号、bigserials)不能保证是无缝的。事实上,它们肯定会在易于理解和常见的条件下造成差距。

这些类型的整数通常是在交易期间产生的。如果事务回滚,则该整数将被丢弃。没有尝试再次使用它。下一次成功插入同一个表将创建一个间隙。

从这样的表中删除行不会弄乱主键。它只是留下了一个缺口。无论是数量还是差距都相对没有意义。

关于mysql - 从数据库中删除项目但保留唯一ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13674853/

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