我有一个mysql .sql文件,我正在尝试使用sqlite内存数据库进行测试,使用相同的文件。
CREATE TABLE IF NOT NOT EXISTS用户( user_id INTEGER PRIMARY KEY AUTO_INCREMENT,
导入时出现错误
- SQLITE_ERROR:near" AUTO_INCREMENT":语法错误
在SQLite中,声明为INTEGER PRIMARY KEY的列将自动自动增量。删除AUTOINCREMENT关键字,然后尝试。
我无法移除AUTOINCREMENT
,因为它是mysql所必需的。有什么建议吗?
答案 0 :(得分:4)
我有一个解决方案。
MySQL支持一种特殊的注释语法,用于何时使用在较新版本的MySQL中工作但不在早期版本中工作的语法。也许你在mysqldump输出中看到过这种东西:
CREATE TABLE `products` (
`product_id` int NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
注意注释中的字符集语句,带有一个有趣的字符串!40101
,这意味着"如果MySQL的版本低于4.1.1,则忽略该字符串作为注释,否则执行它作为SQL语句的一部分。"
而在SQLite中,评论的内部始终只是一个评论。
所以你可以像这样定义你的表:
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY /*!40101 AUTO_INCREMENT */,
. . .
SQLite将忽略AUTO_INCREMENT
,但MySQL将使用它,假设您使用的是4.1.1或更高版本(这几乎可以肯定)。
我刚刚使用SQLite 3.8.5和MySQL 8.0.0-dmr对此进行了测试,并且create table在两种情况下都有效。
INTEGER
没问题,因为它是MySQL中INT
的同义词。不要在SQLite中使用INT
,因为除非您确实使用类型INTEGER
,否则主键列不会自动递增。
永远不要担心MySQL中INT
的论点,如INT(11)
,这个数字并不意味着什么重要。