我正在从这个网站学习SQLite:SQLite Tutorial。
我正在阅读他们在AUTOINCREMENT命令上的文章。
我的问题与他们对为什么此功能有用的解释有关:
使用AUTOINCREMENT属性的主要目的是......
防止SQLite重用尚未使用的值或重复使用先前删除的行。
我对这个解释感到困惑,因为它没有详细解释这个陈述的含义是什么。
如果不同的平台或不同包装中的引擎的特定包装(npm包等)实现了不同的功能,有人可以提供有关后台发生情况的更多详细信息。
此外,更重要的是,举例说明使用此功能是必要的,以及使用它的正确方法和不正确方法。
感谢所有人!
答案 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同样。