MySQL 创建数据库 : problems with FK

标签 mysql database

这是脚本的一小部分(即该脚本的第一行): 当我尝试执行时,它说:
错误代码: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 时停止。 我找不到这些行中的错误,请帮助我,我非常需要它!!

最佳答案

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

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

关于MySQL 创建数据库 : problems with FK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587127/

相关文章:

php - MySQL 中 PHP 动态下拉列表中的 JavaScript 变量

database - 无法声明类 App\User,因为该名称已在我的浏览器中使用

ASP.NET 图片上传架构

sql-server - 如何通过代码在 Sql Server 中设置默认数据库?

sql - 在 SQL 中添加标点符号

c# - 增量更新应用程序数据的最佳方法

mysql - 按行显示配置文件内容

php - 在 php 中创建函数包括 while 循环

php - 将 ô 插入 mysql 数据库是 Rhône 结果的一部分

mysql - 将两列连接到一列