0

我是数据库新手。我有一个看起来有点像这样的 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")
)
;

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

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

4

1 回答 1

1

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

在 SQL 数据库中,不仅仅是 MySQL 也不仅仅是 PostgreSQL,dbms 生成的序列(自动增量、序列、大序列)不能保证是无间隙的。事实上,它们肯定会在众所周知的常见条件下产生差距。

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

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

于 2012-12-02T23:18:01.227 回答