我是数据库新手。我有一个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 条目添加到数据库,那么item主键会发生什么?我的意思是,它会增加,还是填补任何空白?
在我的情况下,我无法将不需要的条目保存在数据库中,因为" active = no"条目,我需要完全删除它们,但我担心它弄乱了项目的主键。
答案 0 :(得分:1)
实际上需要无间隙序列的应用程序相对较少。 做的大多数应用程序需要无间隙序列与会计有关。如果发票是连续编号的,审核员希望对所有发票进行说明,而您无法对gappy序列进行说明。 (如果不能生成发票编号30445,那是因为它放错了地方,因为它从未存在过,或者是因为某人正在输入欺诈性发票?)
在SQL数据库中,不仅仅是MySQL而不仅仅是PostgreSQL,dbms产生的序列(自动增量,连续出版物,bigserials)也不能保证无间隙。事实上,他们确保在充分理解和共同的条件下创造差距。
这些整数通常在交易期间产生。如果回滚事务,则抛弃该整数。没有尝试再次使用它。下一次成功进入同一个表的INSERT将产生一个空白。
从这样的表中删除行并不会弄乱主键。它只是留下了一个空白。数量和差距都相对没有意义。