我有一个 mysql .sql 文件,并且正在尝试使用 sqlite 内存数据库进行测试,并使用相同的文件。
CREATE TABLE IF NOT EXISTS users ( user_id INTEGER PRIMARY KEY AUTO_INCREMENT,
导入时出现错误
- SQLITE_ERROR:“AUTO_INCREMENT”附近:语法错误
这是记录在这里:
在 SQLite 中,声明为 INTEGER PRIMARY KEY 的列将自行自动递增。删除 AUTOINCREMENT 关键字,然后尝试。
我无法删除 ,AUTOINCREMENT因为它是 mysql 所必需的。有什么建议吗?
我有一个解决方案给你。
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 */;
Run Code Online (Sandbox Code Playgroud)
注意注释中的字符集语句,带有一个有趣的字符串!40101,意思是“如果 MySQL 的版本低于 4.1.1,则忽略此字符串作为注释,否则将其作为 SQL 语句的一部分执行”。
而在 SQLite 中,注释的内部始终只是一个注释。
所以你可以像这样定义你的表:
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY /*!40101 AUTO_INCREMENT */,
. . .
Run Code Online (Sandbox Code Playgroud)
SQLite 将忽略AUTO_INCREMENT,但 MySQL 会使用它,假设您使用版本 4.1.1 或更高版本(几乎可以肯定)。
我刚刚用 SQLite 3.8.5 和 MySQL 8.0.0-dmr 对此进行了测试,创建表在这两种情况下都有效。
INTEGER没关系,因为它是INTMySQL 中的同义词。不要INT在 SQLite 中使用,因为除非您从字面上使用 type ,否则主键列不会自动递增INTEGER。
永远不要担心INTMySQL 中的参数,例如INT(11),该数字并不意味着任何重要的事情。
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |