我正在为我的大学任务创建我的第一个MySQL数据库。不幸的是,我一直试图用它们之间的外键创建实际的表。MySQL:无法创建表(errno:150)
这是错误的MySQL工作台正向工程向导为:
执行SQL脚本在服务器
ERROR: Error 1005: Can't create table 'test.fremført' (errno: 150)
CREATE TABLE IF NOT EXISTS `Fremført` (
`Plate` VARCHAR(20) NOT NULL ,
`Verk` VARCHAR(45) NOT NULL ,
`Artist` VARCHAR(45) NOT NULL ,
`Dato` DATE NULL ,
PRIMARY KEY (`Plate`, `Verk`, `Artist`) ,
INDEX `Fremført->Artist_idx` (`Artist` ASC) ,
INDEX `Fremført->Spor_idx` (`Plate` ASC, `Verk` ASC) ,
CONSTRAINT `Fremført->Artist`
FOREIGN KEY (`Artist`)
REFERENCES `Artist` (`ArtistNavn`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `Fremført->Spor`
FOREIGN KEY (`Plate` , `Verk`)
REFERENCES `Spor` (`Verk` , `Verk`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
有谁知道什么地方错了上面的脚本,如果是有办法解决吗?
谢谢!
编辑: 这是要求斯波尔查询
DROP TABLE IF EXISTS `Spor` ;
CREATE TABLE IF NOT EXISTS `Spor` (
`Plate` VARCHAR(45) NOT NULL ,
`Verk` VARCHAR(45) NOT NULL ,
`Spilletid` DECIMAL(3,2) NULL ,
PRIMARY KEY (`Plate`, `Verk`) ,
INDEX `Plate_idx` (`Plate` ASC) ,
CONSTRAINT `Plate`
FOREIGN KEY (`Plate`)
REFERENCES `Plate` (`KatalogNr`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
DROP TABLE IF EXISTS `Artist` ;
CREATE TABLE IF NOT EXISTS `Artist` (
`ArtistNavn` VARCHAR(30) NOT NULL ,
`Artistcol` VARCHAR(45) NULL ,
PRIMARY KEY (`ArtistNavn`))
ENGINE = InnoDB;
Post'CREATE TABLE Spor'和'CREATE TABLE Artist'。通常,Err150意味着主表和相关表之间存在数据类型不匹配。这也是可疑的:'参考文献Spor(Verk,Verk)'也许应该是'(Plate,Verk)'? –
可能会成为问题吗? – Horen
第一篇文章更新了spor和艺术家查询。我已经尝试将ø更改为o,但这不是它看起来的问题。 我已经将完整的脚本上传到http://pastebin.com/ZFPiqFUs – user1736049