SQLite中的AUTOINCREMENT与无AUTOINCREMENT

AUTOINCREMENT vs No AUTOINCREMENT in SQLite

提问人:Super Kai - Kazuya Ito 提问时间:9/30/2023 最后编辑:Super Kai - Kazuya Ito 更新时间:10/25/2023 访问量:61

问:

我把和没有放在表中,如下所示:AUTOINCREMENTidperson

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

然后,我在表格中添加了 3 行,如下所示:person

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

最后,我从表中得到了完全相同的 3 行,它们都将数字递增了 1,如下所示:personid

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

那么,在表中和 no for 有什么区别呢?AUTOINCREMENTAUTOINCREMENTidperson

SQL SQLite 自动增量 数据库表

评论


答:

1赞 Super Kai - Kazuya Ito 9/30/2023 #1

AUTOINCREMENT可以避免重复使用已删除的号码,除非明确指定它们,而根据文档则不能。AUTOINCREMENT

例如,你把 for 放在表中,它有 3 行,如下所示:AUTOINCREMENTidperson

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

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

然后,删除 where is 的行,然后从表中获取 2 行,如下所示:id3person

DELETE FROM person where id = 3;

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

现在,您将一行添加到表中,然后添加到如下所示:person4id

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

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

此外,如果通过将显式设置为 向表添加一行,则添加如下图所示:person3id3id

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

接下来,例如,您不将 for 放入表中,它有 3 行,如下所示:AUTOINCREMENTidperson

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

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

然后,删除 where is 的行,然后从表中获取 2 行,如下所示:id3person

DELETE FROM person where id = 3;

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

现在,您将一行添加到表中,然后添加到如下所示:person3id

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

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