解析错误:在"autoincrement"附近有语法错误 - SQLite

32
我在附近遇到了一个语法错误。这个错误的原因是什么?
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)
);
5个回答

61

10

在SQLite中,如果你将一个列指定为主键,就不需要指定AUTOINCREMENT...


1

SQLite 自动增量 : 不建议使用

除非您创建一个指定了 WITHOUT ROWID 选项的表,否则会得到一个隐式的自动增量列,称为 rowid

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


1
此外,执行 select rowid, * from table_name 可以同时检索 rowid。 - Vitalis

0
我得到了下面的相同错误:
解析错误:附近的“autoincrement”:语法错误
因为我在下面的代码中使用了AUTOINCREMENT,但没有使用INTEGER PRIMARY KEY
CREATE TABLE my_table (
  id INTEGER AUTOINCREMENT
          -- ↑↑↑↑↑↑↑↑↑↑↑↑↑
);

所以,我在下面的代码中使用了AUTOINCREMENTINTEGER PRIMARY KEY,然后问题就解决了。
CREATE TABLE my_table (
  id INTEGER PRIMARY KEY AUTOINCREMENT
  -- ↑↑↑↑↑↑↑ ↑↑↑↑↑↑↑ ↑↑↑
);

该文档中提到:

在WITHOUT ROWID表或非"INTEGER PRIMARY KEY"列上尝试使用AUTOINCREMENT会导致错误。

此外,如果您在PRIMARY KEY AUTOINCREMENT中使用TEXT类型,如下所示:

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

然后,您会收到以下错误信息:
解析错误:AUTOINCREMENT只允许在INTEGER PRIMARY KEY上使用。

-3

这是一个简单的解决方案。只需要使用 AUTOINCREMENT 而不是 AUTO_INCREMENT


他们正在使用AUTOINCREMENT - Sheldon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接