首页 文章

MySQL CREATE DB:FK的问题

提问于
浏览
1

这里有一小部分脚本(这是该脚本的第一行):当我尝试执行时,它说:
Error Code: 1005. Can't create table 'test.paese' (errno: 150) 0.062 sec

当我尝试从MySQL做"Forward Engineer"时,它回复了我一些关于:
如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息引用 error 150, table creation failed because a foreign key constraint was not correctly formed.

`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 时它会停止 . 我找不到这些行之间的错误,请帮助我,我需要它!

2 回答

  • 3

    这是因为列 Comune 上的约束冲突

    Comunetest 中不可为空 . 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.
    ------------
    
  • 2

    由于您的引用选项,约束失败 .

    ... 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)
    

相关问题