2012-03-23 155 views
25

我试图将我的MySQL创建表语句转换为SQLite创建表语句。大部分我已经完成了,但是我不知道如何将MySQL的UNIQUE INDEX更改为Sqlite CREATE INDEX(我认为这些大致相同,如果我错了,请纠正我)。如何正确使用SQLite执行CREATE INDEX

所以我有以下MySQL表(它改了一下来自:

-- ----------------------------------------------------- 
-- Table `pyMS`.`feature` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `pyMS`.`feature` (
    `feature_id` VARCHAR(40) NOT NULL , 
    `intensity` DOUBLE NOT NULL , 
    `overallquality` DOUBLE NOT NULL , 
    `quality` DOUBLE NOT NULL , 
    `charge` INT NOT NULL , 
    `content` VARCHAR(45) NOT NULL , 
    `msrun_msrun_id` INT NOT NULL , 
    PRIMARY KEY (`feature_id`, `msrun_msrun_id`) , 
    UNIQUE INDEX `id_UNIQUE` (`feature_id` ASC) , 
    INDEX `fk_feature_msrun1` (`msrun_msrun_id` ASC) , 
    CONSTRAINT `fk_feature_msrun1` 
    FOREIGN KEY (`msrun_msrun_id`) 
    REFERENCES `pyMS`.`msrun` (`msrun_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

我根据http://www.sqlite.org/lang_createindex.html改变了指数,确实也改变了一些其他的东西从MySQL去SQLite的,但我。测试它和他们的工作 所以这是我的SQLite代码:

-- ----------------------------------------------------- 
-- Table `feature` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `feature` (
    `feature_id` VARCHAR(40) NOT NULL , 
    `intensity` DOUBLE NOT NULL , 
    `overallquality` DOUBLE NOT NULL , 
    `quality` DOUBLE NOT NULL , 
    `charge` INT NOT NULL , 
    `content` VARCHAR(45) NOT NULL , 
    `msrun_msrun_id` INT NOT NULL , 
    CREATE UNIQUE INDEX `id_UNIQUE` ON `feature` (`feature_id` ASC) , 
    CREATE INDEX `fk_feature_msrun1` ON `msrun` (`msrun_msrun_id` ASC) , 
    CONSTRAINT `fk_feature_msrun1` 
    FOREIGN KEY (`msrun_msrun_id`) 
    REFERENCES `msrun` (`msrun_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION); 

这不工作时,我删除索引行,它的工作就我所看到的指标线符合这一描述。 210,我没有看到它出错的地方。那么如何更改这两行

CREATE UNIQUE INDEX `id_UNIQUE` ON `feature` (`feature_id` ASC) , 
CREATE INDEX `fk_feature_msrun1` ON `msrun` (`msrun_msrun_id` ASC) , 

使其语法正确?

回答

41

CREATE UNIQUE INDEX是它自己的声明,不能在CREATE TABLE声明中使用。

移动索引的语句出CREATE TABLE

CREATE TABLE IF NOT EXISTS `feature` (
    `feature_id` VARCHAR(40) NOT NULL , 
    `intensity` DOUBLE NOT NULL , 
    `overallquality` DOUBLE NOT NULL , 
    `quality` DOUBLE NOT NULL , 
    `charge` INT NOT NULL , 
    `content` VARCHAR(45) NOT NULL , 
    `msrun_msrun_id` INT NOT NULL, 
    CONSTRAINT `fk_feature_msrun1` 
    FOREIGN KEY (`msrun_msrun_id`) 
    REFERENCES `msrun` (`msrun_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION); 
CREATE UNIQUE INDEX `id_UNIQUE` ON `feature` (`feature_id` ASC); 
CREATE INDEX `fk_feature_msrun1` ON `feature` (`msrun_msrun_id` ASC); 
10

你需要看看CREATE TABLE语法,而不是CREATE INDEX。 SQLite将在CREATE TABLE语句中接受这种形式的UNIQUE约束。

CREATE TABLE IF NOT EXISTS `feature` (
... 
    CONSTRAINT `id_UNIQUE` UNIQUE (`feature_id`), 
... 
);