SQLite 中的自动增量与无自动增量

问题描述 投票:0回答:1

我在

AUTOINCREMENT
表中为
id
放置和未放置
person
,如下所示:

CREATE TABLE person (
  id INTEGER PRIMARY KEY AUTOINCREMENT, 
  name TEXT            # ↑↑↑↑↑↑↑↑↑↑↑↑↑
);
CREATE TABLE person (
  id INTEGER PRIMARY KEY, # No AUTOINCREMENT
  name TEXT
);

然后,我在

person
表中添加了 3 行,如下所示:

INSERT INTO person (name) 
VALUES ('John'), ('David'), ('Lisa');

最后,我从

person
表中得到了完全相同的 3 行,两者都将
id
的数字增加了 1,如下所示:

.headers on  
.mode box
SELECT * FROM person;
┌────┬───────┐
│ id │ name  │
├────┼───────┤
│ 1  │ John  │
│ 2  │ David │
│ 3  │ Lisa  │
└────┴───────┘

那么,

AUTOINCREMENT
表中的
AUTOINCREMENT
id
和没有
person
有什么区别?

database sqlite auto-increment database-table dbtable
1个回答
0
投票

AUTOINCREMENT
可以根据文档避免重复使用已删除的号码。

例如,您将

AUTOINCREMENT
表示
id
放入
person
表中,它有 3 行,如下所示:

CREATE TABLE person (
  id INTEGER PRIMARY KEY AUTOINCREMENT, 
  name TEXT            # ↑↑↑↑↑↑↑↑↑↑↑↑↑
);

SELECT * FROM person;
┌────┬───────┐
│ id │ name  │
├────┼───────┤
│ 1  │ John  │
│ 2  │ David │
│ 3  │ Lisa  │
└────┴───────┘

然后,删除

id
3
的行,然后从
person
表中获取 2 行,如下所示:

DELETE FROM person where id = 3;

SELECT * FROM person;
┌────┬───────┐
│ id │ name  │
├────┼───────┤
│ 1  │ John  │
│ 2  │ David │
└────┴───────┘

现在,您向

person
表添加一行,然后将
4
添加到
id
,如下所示:

INSERT INTO person (name) values ('Anna');

SELECT * FROM person;
┌────┬───────┐
│ id │ name  │
├────┼───────┤
│ 1  │ John  │
│ 2  │ David │
│ 4  │ Anna  │ <- Here
└────┴───────┘

此外,如果通过显式将

person
设置为
3
id
表添加一行,则
3
将添加到
id
,如下所示:

INSERT INTO person (id, name) values (3, 'Anna');
                  # ↑↑              # ↑
SELECT * FROM person;
┌────┬───────┐
│ id │ name  │
├────┼───────┤
│ 1  │ John  │
│ 2  │ David │
│ 3  │ Anna  │ <- Here
└────┴───────┘

接下来,例如,您不在

AUTOINCREMENT
表中将
id
放入
person
,它有 3 行,如下所示:

CREATE TABLE person (
  id INTEGER PRIMARY KEY, # No AUTOINCREMENT
  name TEXT
);

SELECT * FROM person;
┌────┬───────┐
│ id │ name  │
├────┼───────┤
│ 1  │ John  │
│ 2  │ David │
│ 3  │ Lisa  │
└────┴───────┘

然后,删除

id
3
的行,然后从
person
表中获取 2 行,如下所示:

DELETE FROM person where id = 3;

SELECT * FROM person;
┌────┬───────┐
│ id │ name  │
├────┼───────┤
│ 1  │ John  │
│ 2  │ David │
└────┴───────┘

现在,您向

person
表添加一行,然后将
3
添加到
id
,如下所示:

INSERT INTO person (name) values ('Anna');

SELECT * FROM person;
┌────┬───────┐
│ id │ name  │
├────┼───────┤
│ 1  │ John  │
│ 2  │ David │
│ 3  │ Anna  │ <- Here
└────┴───────┘
© www.soinside.com 2019 - 2024. All rights reserved.