我有一个mysql .sql文件,我试图使用sqlite内存数据库进行测试,使用相同的文件.
CREATE TABLE IF NOT EXISTS users (
user_id INTEGER PRIMARY KEY AUTO_INCREMENT,
导入时我收到错误
In sqlite a column declared INTEGER PRIMARY KEY will autoincrement by itself. Remove the AUTOINCREMENT keyword and then try.
我无法删除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 */;
注意注释中的字符集语句,带有一个有趣的字符串!40101表示“如果MysqL的版本低于4.1.1,则忽略该字符串作为注释,否则将其作为sql语句的一部分执行.”
所以你可以像这样定义你的表:
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),这个数字并不意味着什么重要.