2014-09-01 104 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