从数据库中删除项目但保留uniqueID

时间:2012-12-02 22:56:15

标签: mysql sql postgresql

我是数据库新手。我有一个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"条目,我需要完全删除它们,但我担心它弄乱了项目的主键。

1 个答案:

答案 0 :(得分:1)

实际上需要无间隙序列的应用程序相对较少。 的大多数应用程序需要无间隙序列与会计有关。如果发票是连续编号的,审核员希望对所有发票进行说明,而您无法对gappy序列进行说明。 (如果不能生成发票编号30445,那是因为它放错了地方,因为它从未存在过,或者是因为某人正在输入欺诈性发票?)

在SQL数据库中,不仅仅是MySQL而不仅仅是PostgreSQL,dbms产生的序列(自动增量,连续出版物,bigserials)也不能保证无间隙。事实上,他们确保在充分理解和共同的条件下创造差距。

这些整数通常在交易期间产生。如果回滚事务,则抛弃该整数。没有尝试再次使用它。下一次成功进入同一个表的INSERT将产生一个空白。

从这样的表中删除行并不会弄乱主键。它只是留下了一个空白。数量和差距都相对没有意义。