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

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

我在

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)
);
database sqlite syntax-error auto-increment parse-error
5个回答
61
投票

根据 SQLite FAQ,您必须声明

INTEGER PRIMARY KEY
INTEGER PRIMARY KEY AUTOINCREMENT
列才能实现这一点。


10
投票

在 SQLite 中,如果将列指定为主键,则无需指定 AUTOINCRMENT...


1
投票

SQLite 自动增量:你应该避免使用它

除非您创建指定

WITHOUT ROWID
选项的表,否则您将获得一个名为
rowid
的隐式自动增量列。

rowid
列存储唯一标识表中一行的 64 位有符号整数。


0
投票

我在下面遇到了同样的错误:

解析错误:“自动增量”附近:语法错误

因为我使用了

AUTOINCREMENT
而没有使用
INTEGER PRIMARY KEY
,如下所示:

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

于是,我将

AUTOINCREMENT
INTEGER PRIMARY KEY
一起使用,如下所示,然后错误就解决了:

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

医生说如下:

任何尝试在 NOT ROWID 表或

AUTOINCREMENT
列以外的列上使用
INTEGER PRIMARY KEY
都会导致错误。

此外,如果您使用

TEXT
,请输入
PRIMARY KEY AUTOINCREMENT
,如下所示:

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

然后,您会收到以下错误:

解析错误:仅在整数主键上允许自动增量


-3
投票

这是一个简单的解决方案。只需使用

AUTOINCREMENT
代替
AUTO_INCREMENT

© www.soinside.com 2019 - 2024. All rights reserved.