需要帮助从SQLite了解AUTOINCREMENT

时间:2017-03-12 21:08:33

标签: sql database sqlite

我正在从这个网站学习SQLite:SQLite Tutorial

我正在阅读他们在AUTOINCREMENT命令上的文章。

我的问题与他们对为什么此功能有用的解释有关:

  

使用AUTOINCREMENT属性的主要目的是......

     
    

防止SQLite重用尚未使用的值或重复使用先前删除的行。

  

我对这个解释感到困惑,因为它没有详细解释这个陈述的含义是什么。

如果不同的平台或不同包装中的引擎的特定包装(npm包等)实现了不同的功能,有人可以提供有关后台发生情况的更多详细信息。

此外,更重要的是,举例说明使用此功能是必要的,以及使用它的正确方法和不正确方法。

感谢所有人!

2 个答案:

答案 0 :(得分:3)

  

防止SQLite重用尚未使用的值或来自的值   以前删除的行。

AUTOINCREMENT属性确保新生成的id将是唯一的,不会来自该列中任何已使用的id,或者不应来自已删除的id。它主要用在表的主键中,我们需要到目前为止尚未使用的唯一属性。

在大多数关系数据库中,存在AutoIncrement属性,但在Oracle中,我看到Sequence同样具有AutoIncrement属性。

例如:如果你有10行,其中AutoIncrement列名为id且值为1到10.现在,你删除所有行并插入新行,然后新行将有id = 11因为1到10已经被使用过了。您不需要指定id值,因为它会通过检查先前插入的值自动填充新的行id值。

答案 1 :(得分:1)

此功能通常用在表的主键上(我个人更喜欢将其命名为ID),如下所示:

CREATE TABLE MYTABLE(
    ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    ...
);

如果您正在学习SQLite,您应该知道该表的主键绝对对于此表中的每条记录都是唯一的。 因此,如果要在其主键上没有AUTOINCREMENT的情况下向表中插入记录,数据库将强制您指定每个新记录的ID。

如果你的桌子上已经有一些记录,你可能会问自己一个问题,比如“我在记录中放入什么ID以确保它是唯一的?”

这就是为AUTOINCREMENT创建的。如果在表的主键上设置了AUTOINCREMENT,则在插入记录时不再需要指定它,因此您不再需要考虑将哪个ID放在那里。

现在它是如何运作的。如果在表的主键上设置了AUTOINCREMENT,则会将特殊数量的已添加记录(将其命名为变量“已添加”)与表中的数据一起存储在数据库中。使用此表发出INSERT命令时,其ID将计算为

added + 1

添加的变量将增加(autoINCREMENT)

最初,添加的值为0.

例如,正如Akash KC已经说过的,如果表中添加了10条记录,则下一条记录的ID将为11。

细节是AUTOINCREMENT不介意删除 - 如果你拿一个空表,向它添加10条记录,删除其中一条ID为5(例如),然后添加一个新表,其ID将为11同样。