将mysql转换为sqlite时出错
问题描述:
我有一个使用模块'SQL :: Translator'将Mysql转换转换为sqlite的perl脚本。将mysql转换为sqlite时出错
Mysql的文件有如下:
CREATE TABLE `table1` (
`id1` char(4) NOT NULL,
`text1` char(2) NOT NULL,
`text2` char(2) NOT NULL,
`text3` enum('N','Y') NOT NULL,
UNIQUE KEY `id1` (`id1`,`text1`,`text2`),
CONSTRAINT `table1_ibfk_1` FOREIGN KEY (`id1`) REFERENCES `table2` (`id1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
在使用“SQL ::译者模块将其转换为最终的SQL,我得到最终的SQL下面一行:
CREATE INDEX "table1" ON "table2" ("table1");
转换这个时候最后的sql文件到sqlite使用sqlite3命令,我得到以下错误。
there is already an index named table1 Error: near line 540: no such table: main.table1
我试图从最终的SQL删除行'CREATE INDEX "table1" ON "table2" ("table1");'
,然后它工作正常。
请帮助
答
与MySQL不同,SQLite的使用表和索引相同的命名空间 - 你不能有相同的名称作为表的索引。您需要更改索引的名称。
+0
How我们可以改变索引的名字吗? – Futuregeek 2014-09-18 10:04:46
这里的东西看起来不一致。你可以按原样粘贴脚本吗? 'table1'实际上是'table2'中列的名称吗? – 2014-09-01 07:35:50
你为什么想要做这个转换?如果是用于创建测试数据库,请查看https://metacpan.org/pod/Test::mysqld - SQLite不是使用数据库的理想选择,它将忽略FOREIGN KEY约束,例如 – plusplus 2014-09-01 09:42:35