这里有一小部分脚本(这是该脚本的第一行):
当我尝试执行时,我说:
错误代码:1005。无法创建表'test.paese'(错误号:150)0.062秒
当我尝试从MySQL做“转发工程师”时,它回复了我一些关于: 如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息引用错误150,则表创建失败,因为未正确形成外键约束。 < / p>
`SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; USE `test` ; -- ----------------------------------------------------- -- Table `test`.`SETTORE` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `test`.`SETTORE` ( `Comune` CHAR NOT NULL , `superficie` INT(11) NULL , PRIMARY KEY (`Comune`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `test`.`PAESE` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `test`.`PAESE` ( `Nome-paese` CHAR NOT NULL , `Comune` CHAR NOT NULL , `num_abitanti` INT(11) NULL , `altitudine` INT(11) NULL , `IDpaese` INT(11) NOT NULL , PRIMARY KEY (`Nome-paese`, `Comune`) , INDEX `Comune` (`Comune` ASC) , UNIQUE INDEX `idPAESE_UNIQUE` (`IDpaese` ASC) , CONSTRAINT `Comune` FOREIGN KEY (`Comune` ) REFERENCES `test`.`SETTORE` (`Comune` ) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `test`.`PERIODO` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `test`.`PERIODO` ( `Settimana` INT(11) NOT NULL , PRIMARY KEY (`Settimana`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `test`.`TIPO-INIZIATIVA` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `test`.`TIPO-INIZIATIVA` ( `Nome-tipo-iniziativa` CHAR NOT NULL , PRIMARY KEY (`Nome-tipo-iniziativa`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `test`.`INIZIATIVA` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `test`.`INIZIATIVA` ( `Nome-tipo-iniziativa` CHAR NOT NULL , `Settimana` INT(11) NOT NULL , `Nome-paese` CHAR NOT NULL , `Comune` CHAR NOT NULL , `descrizione` VARCHAR(45) , `costo_intero` FLOAT NULL , `costo_ridotto` FLOAT NULL , `orario_apertura` TIME NULL , `orario_chiusura` TIME NULL , PRIMARY KEY (`Nome-tipo-iniziativa`, `Settimana`, `Nome-paese`, `Comune`) , INDEX `Nome-paese` (`Nome-paese` ASC) , INDEX `Comune` (`Comune` ASC) , INDEX `Settimana` (`Settimana` ASC) , INDEX `Nome-tipo-iniziativa` (`Nome-tipo-iniziativa` ASC) , CONSTRAINT `Nome-paese` FOREIGN KEY (`Nome-paese` ) REFERENCES `test`.`PAESE` (`Nome-paese` ) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Comune` FOREIGN KEY (`Comune` ) REFERENCES `test`.`PAESE` (`Comune` ) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Settimana` FOREIGN KEY (`Settimana` ) REFERENCES `test`.`PERIODO` (`Settimana` ) ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT `Nome-tipo-iniziativa` FOREIGN KEY (`Nome-tipo-iniziativa` ) REFERENCES `test`.`TIPO-INIZIATIVA` (`Nome-tipo-iniziativa` ) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE = InnoDB;`
所以DBMS首先创建表 SETTORE ,但是在执行 CREATE TABLE PAESE 时它会停止。 我无法在这些行中找到错误,请帮助我,我非常需要!!
答案 0 :(得分:3)
由于您的参考选项,约束失败。
... ON DELETE SET NULL
这是非法的,因为您的专栏不能是NULL
。
CREATE TABLE IF NOT EXISTS `test`.`PAESE` (
`Nome-paese` CHAR NOT NULL ,
`Comune` CHAR NOT NULL , <----------------------------+
`num_abitanti` INT(11) NULL , |
`altitudine` INT(11) NULL , |
`IDpaese` INT(11) NOT NULL , |
PRIMARY KEY (`Nome-paese`, `Comune`) , |
INDEX `Comune` (`Comune` ASC) , |
UNIQUE INDEX `idPAESE_UNIQUE` (`IDpaese` ASC) , |
CONSTRAINT `Comune` |
FOREIGN KEY (`Comune` ) |
REFERENCES `test`.`SETTORE` (`Comune` ) |
ON DELETE SET NULL <--------------------------------+
ON UPDATE CASCADE)
答案 1 :(得分:2)
这是因为列Comune
Comune
test
中的PAESE
列不可为空。你正在让MySQL旋转!
SHOW ENGINE INNODB STATUS;
------------------------
LATEST FOREIGN KEY ERROR
------------------------
130129 21:55:19 Error in foreign key constraint of table test/paese:
FOREIGN KEY (`Comune`)
REFERENCES `test`.`SETTORE` (`Comune`)
ON DELETE SET NULL ON UPDATE CASCADE
):
You have defined a SET NULL condition though some of the
columns are defined as NOT NULL.
------------