2012-03-23 16 views
25

Sto provando a convertire le istruzioni MySQL create table in SQLite per creare istruzioni di tabella. La maggior parte di ciò che ho fatto, tuttavia, non so come modificare UNQUE INDICE di MySQL in Sqlites CREATE INDEX (ho pensato che fossero all'incirca uguali, correggimi se sbaglio).Come creare correttamente CREATE INDEX con SQLite

così ho la seguente tabella di MySQL (è cambiato un po 'dal:

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

E ho cambiato l'indice in base al http://www.sqlite.org/lang_createindex.html anche ho cambiato alcune altre cose per andare da MySQL a SQLite, ma io. provato e funzionano Quindi questo è il mio codice 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); 

questo non funziona quando rimuovo le linee INDICE funziona per quanto posso vedere le linee INDEX conformi a questa descrizione.. 210, non vedo dove va male. Quindi, come posso cambiare le due linee

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

per rendere corretta la loro sintassi?

risposta

41

CREATE UNIQUE INDEX è una dichiarazione propria e non può essere utilizzato all'interno di un'istruzione CREATE TABLE.

Spostare le dichiarazioni indice di 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

è necessario guardare al CREATE TABLE sintassi, non CREATE INDEX. SQLite accetterà questa forma di un vincolo UNIQUE in un'istruzione CREATE TABLE.

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