SQLite是否支持UNIQUE KEY?迁移MariaDB至SQLite遇语法错误
MariaDB迁移SQLite:UNIQUE KEY语法错误解决方案
原MariaDB导出SQL语句
CREATE TABLE IF NOT EXISTS Persons ( PersonID int, name varchar(255), LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE KEY `ID1234567` (`name`) )
执行时的错误信息
OperationalError: near "KEY": syntax error
问题解决与原因说明
SQLite不支持MariaDB里UNIQUE KEY这种语法,要实现相同的唯一约束效果,有两种修改方式:
方式一:保留约束名的表级约束
用CONSTRAINT关键字指定约束名称,属于SQL标准写法,SQLite完全支持:
CREATE TABLE IF NOT EXISTS Persons ( PersonID int, name varchar(255), LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT ID1234567 UNIQUE (name) );
方式二:列级唯一约束
直接在name列定义后添加UNIQUE,适合不需要显式指定约束名的场景:
CREATE TABLE IF NOT EXISTS Persons ( PersonID int, name varchar(255) UNIQUE, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) );
原因解释
SQLite的表约束语法中,唯一约束的格式为[CONSTRAINT 约束名] UNIQUE (列名),而UNIQUE KEY是MariaDB的特有语法糖,属于非标准SQL写法,SQLite并未兼容该语法。但SQLite完全支持唯一约束功能,只需改用标准语法即可实现相同效果。
内容的提问来源于stack exchange,提问作者Bending Rodriguez
相关产品推荐
相关产品推荐

