分析错误:接近“自动增量”:语法错误- SQLite

qij5mzcb  于 2023-10-23  发布在  SQLite
关注(0)|答案(5)|浏览(193)

我在AUTOINCREMENT附近得到一个语法错误。这个错误的原因是什么?

CREATE TABLE person (
    id INTEGER NOT NULL AUTOINCREMENT,
    name TEXT NOT NULL
);

CREATE TABLE department (
    id INTEGER NOT NULL AUTOINCREMENT,
    name TEXT NOT NULL,
    FOREIGN KEY (leader) REFERENCES person(id)
);
gcxthw6b

gcxthw6b1#

根据SQLite FAQ,你必须声明一个INTEGER PRIMARY KEYINTEGER PRIMARY KEY AUTOINCREMENT列来实现这一点。

zc0qhyus

zc0qhyus2#

在SQLite中,如果你指定一个列作为主键,你不需要指定AUTOINCREMENT。

zu0ti5jz

zu0ti5jz3#

SQLite自动增量:你应该避免使用它。
除非创建一个指定WITHOUT ROWID选项的表,否则将得到一个名为rowid的隐式自动增量列。
rowid列存储唯一标识表中的行的64位有符号整数。

0s0u357o

0s0u357o4#

我在下面得到了同样的错误:
分析错误:接近“自动增量”:语法错误
因为我使用了AUTOINCREMENT而没有INTEGER PRIMARY KEY,如下所示:

CREATE TABLE my_table (
  id INTEGER AUTOINCREMENT
           # ↑↑↑↑↑↑↑↑↑↑↑↑↑
);

所以,我使用AUTOINCREMENTINTEGER PRIMARY KEY,如下所示,然后错误就解决了:

CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT
   # ↑↑↑↑↑↑↑ ↑↑↑↑↑↑↑ ↑↑↑
);

doc在下面说:
在WITHOUT ROWID表或INTEGER PRIMARY KEY列以外的列上使用AUTOINCREMENT的任何尝试都会导致错误。
此外,如果您使用TEXT类型与PRIMARY KEY AUTOINCREMENT,如下所示:

CREATE TABLE my_table (
  id TEXT PRIMARY KEY AUTOINCREMENT
   # ↑↑↑↑
);

然后,你会得到下面的错误:
分析错误:只允许在INTEGER PRIMARY KEY上使用自动递增

2w3kk1z5

2w3kk1z55#

这是个简单的解决办法使用AUTOINCREMENT代替AUTO_INCREMENT

相关问题