You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将应用数据库从MySQL转SQLite时建表遇AUTO_INCREMENT语法错误的解决方法

解决SQLite中"AUTO_INCREMENT"语法错误的问题

错误原因

SQLite并不支持MySQL里的AUTO_INCREMENT关键字,它有自己的自增实现逻辑——要么用INTEGER PRIMARY KEY AUTOINCREMENT,要么更推荐直接使用INTEGER PRIMARY KEY(后者是SQLite原生的自增主键实现,性能更优)。另外,SQLite的类型体系、语法规则和MySQL存在差异,一些MySQL特有的配置项在SQLite里完全不需要。

正确的SQLite建表语句

把你的MySQL语句修改成下面这样就可以正常执行了:

CREATE TABLE Todo (
    Id INTEGER PRIMARY KEY,
    Title TEXT DEFAULT NULL,
    Category TEXT DEFAULT NULL,
    State TEXT DEFAULT NULL
);

关键修改点说明

  • 自增主键:将int(11) NOT NULL AUTO_INCREMENT改为INTEGER PRIMARY KEY。SQLite中,声明为INTEGER PRIMARY KEY的列会自动实现自增,当你插入数据时不给Id赋值,它会自动生成唯一的递增整数。如果一定要显式标注自增逻辑,也可以写成INTEGER PRIMARY KEY AUTOINCREMENT,但注意这里是没有下划线的AUTOINCREMENT,不过这种方式会有额外的性能开销,普通场景下用前者就足够了。
  • 数据类型:把MySQL的varchar(255)换成SQLite的TEXT。SQLite是动态类型,TEXT可以存储任意长度的字符串,不需要指定长度限制,完全能替代varchar的作用。
  • 移除MySQL特有语法:删掉ENGINE=MyISAM和DEFAULT CHARSET=utf8,因为SQLite没有存储引擎的概念,且从3.0版本开始默认就支持UTF-8编码,不需要额外声明。

测试插入示例

你可以用下面的语句验证自增功能,Id会自动生成:

INSERT INTO Todo (Title, Category, State) VALUES ('买菜', '日常', '未完成');
INSERT INTO Todo (Title, Category, State) VALUES ('写代码', '工作', '进行中');

内容的提问来源于stack exchange,提问作者Julian Medic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:46:11