2012-03-23 5 views
25

私は自分のMySQL create table文をSQLite create table文に変換しようとしています。そのほとんどは私がやったが、私はMySQLのユニークインデックスをSqlites 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に応じてインデックスを変更し、私はまた、SQLiteのにMySQLのから行くためにいくつかの他のものを変更するが、私でした。それをテストし、彼らが働く だからこれは私のSQLiteのコードです:。。私はそれが仕事をしINDEX行を削除すると

-- ----------------------------------------------------- 
-- 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); 

これは動作しません。私の知る限りINDEXラインがこの説明に準拠して見ることができるように。 210、どこが間違っているのかわかりません。だから、私はどのように2つの行を変更することができます

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構文を見てする必要があります。 SQLiteはCREATE TABLE文でこの形式のUNIQUE制約を受け入れます。

CREATE TABLE IF NOT EXISTS `feature` (
... 
    CONSTRAINT `id_UNIQUE` UNIQUE (`feature_id`), 
... 
); 
関連する問題