Nie*_*ein 27 mysql sqlite indexing
我正在尝试将我的MySQL create table语句转换为SQLite create table语句.大部分我已经完成了,但是我不知道如何将MySQL的UNIQUE INDEX更改为Sqlites 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;
Run Code Online (Sandbox Code Playgroud)
我根据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);
Run Code Online (Sandbox Code Playgroud)
这不起作用.当我删除INDEX线时,它确实有效.据我所知,INDEX行符合http://www.sqlite.org/lang_createindex.html这个描述,我看不出它出错的地方.那我怎么能改变这两条线呢
CREATE UNIQUE INDEX `id_UNIQUE` ON `feature` (`feature_id` ASC) ,
CREATE INDEX `fk_feature_msrun1` ON `msrun` (`msrun_msrun_id` ASC) ,
Run Code Online (Sandbox Code Playgroud)
使他们的语法正确吗?
Jus*_*ᚄᚒᚔ 45
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);
Run Code Online (Sandbox Code Playgroud)
Mik*_*ll' 13
您需要查看CREATE TABLE语法,而不是CREATE INDEX.SQLite将在CREATE TABLE语句中接受这种形式的UNIQUE约束.
CREATE TABLE IF NOT EXISTS `feature` (
...
CONSTRAINT `id_UNIQUE` UNIQUE (`feature_id`),
...
);
Run Code Online (Sandbox Code Playgroud)