2012-03-23 7 views
25

के साथ INDEX को सही ढंग से कैसे करें I SQLQ को टेबल स्टेटमेंट बनाने के लिए मेरे MySQL बनाने तालिका विवरणों को कन्वर्ट करने का प्रयास कर रहा हूं। मैंने इसमें से अधिकांश किया है, हालांकि मुझे नहीं पता कि माईएसक्यूएल के यूनिक इंडेक्स को एसक्लाइट्स बनाने के लिए इंडेक्स कैसे बनाएं (मैंने सोचा था कि ये लगभग समान थे, अगर मैं गलत हूं तो कृपया मुझे सही करें)।एसक्यूएलएइट

तो मैं निम्नलिखित 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 वाक्य रचना को देखने के लिए, सूचकांक का निर्माण नहीं की जरूरत है। SQLite एक CREATE तालिका कथन में एक अद्वितीय बाधा के इस रूप को स्वीकार करेगा।

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