2014-09-01 103 views
0

我有一个使用模块'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");',然后它工作正常。

请帮助

+0

这里的东西看起来不一致。你可以按原样粘贴脚本吗? 'table1'实际上是'table2'中列的名称吗? – 2014-09-01 07:35:50

+0

你为什么想要做这个转换?如果是用于创建测试数据库,请查看https://metacpan.org/pod/Test::mysqld - SQLite不是使用数据库的理想选择,它将忽略FOREIGN KEY约束,例如 – plusplus 2014-09-01 09:42:35

回答

0

与MySQL不同,SQLite的使用表和索引相同的命名空间 - 你不能有相同的名称作为表的索引。您需要更改索引的名称。

+0

How我们可以改变索引的名字吗? – Futuregeek 2014-09-18 10:04:46