1

ここにスクリプトの小さな部分があります (それはそのスクリプトの最初の行です)
:秒

そして、MySQL から「フォワード エンジニア」を実行しようとすると、次のように返信されます
正しく形成されていません。

`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 ;
`テスト`を使用してください。

-- ------------------------------------------------ -----
-- テーブル `test`.`SETTORE`
-- ------------------------------------------------ -----
CREATE TABLE IF NOT EXISTS `test`.`SETTOE` (
  `Comune` CHAR NOT NULL ,
  `表面` INT(11) NULL ,
  主キー (`Comune`) )
エンジン = InnoDB;


-- ------------------------------------------------ -----
-- テーブル `test`.`PAESE`
-- ------------------------------------------------ -----
CREATE TABLE IF NOT EXISTS `test`.`PAESE` (
  `nome-paese` CHAR NOT NULL ,
  `Comune` CHAR NOT NULL ,
  `num_abitanti` INT(11) NULL ,
  `高度` INT(11) NULL ,
  `IDpaese` INT(11) NOT NULL ,
  PRIMARY KEY (`ノメパセ`, `コムネ`) ,
  INDEX `Comune` (`Comune` ASC) 、
  UNIQUE INDEX `idPAESE_UNIQUE` (`IDpaese` ASC) 、
  CONSTRAINT `Comune`
    FOREIGN KEY (`Comune` )
    REFERENCES `test`.`SETTORE` (`Comune` )
    ON DELETE SET NULL
    更新カスケード時)
エンジン = InnoDB;


-- ------------------------------------------------ -----
-- テーブル `test`.`PERIODO`
-- ------------------------------------------------ -----
CREATE TABLE IF NOT EXISTS `test`.`PERIODO` (
  `Settimana` INT(11) NOT NULL ,
  PRIMARY KEY (`セッティマナ`) )
エンジン = InnoDB;


-- ------------------------------------------------ -----
-- テーブル `test`.`TIPO-INIZIATIVA`
-- ------------------------------------------------ -----
CREATE TABLE IF NOT EXISTS `test`.`TIPO-INIZIATIVA` (
  `nome-tipo-iniziativa` CHAR NOT NULL ,
  PRIMARY KEY (`Nome-tipo-iniziativa`) )
エンジン = InnoDB;


-- ------------------------------------------------ -----
-- テーブル `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 ,
  `説明` 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 `のめパセ` (`のめパセ` ASC) ,
  INDEX `Comune` (`Comune` ASC) 、
  INDEX `Settimana` (`Settimana` ASC) 、
  INDEX `Nome-tipo-iniziativa` (`Nome-tipo-iniziativa` ASC) 、
  CONSTRAINT `ノメパセ`
    FOREIGN KEY (`ノメパセ` )
    REFERENCES `test`.`PAESE` (`Nome-paese` )
    ON DELETE SET NULL
    更新カスケードでは、
  CONSTRAINT `Comune`
    FOREIGN KEY (`Comune` )
    REFERENCES `test`.`PAESE` (`Comune` )
    ON DELETE SET NULL
    更新カスケードでは、
  CONSTRAINT `セッティマナ`
    FOREIGN KEY (`セッティマナ` )
    REFERENCES `test`.`PERIODO` (`Settimana` )
    ON DELETE SET NULL
    更新カスケードでは、
  CONSTRAINT `Nome-tipo-iniziativa`
    FOREIGN KEY (`Nome-tipo-iniziativa` )
    REFERENCES `test`.`TIPO-INIZIATIVA` (`Nome-tipo-iniziativa` )
    ON DELETE SET NULL
    更新カスケード時)
エンジン = InnoDB;`

したがって、DBMS は最初にテーブルSETTOREを作成しますが、その後CREATE TABLE PAESEの実行中に停止します。これらの行にエラーが見つかりません。助けてください。とても必要です!!

4

2 に答える 2

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)
于 2013-01-29T16:26:45.627 に答える
2

これは、列の制約が競合しているためです。Comune

では、列Comuneはヌル可能ではありませんtestPAESE. あなたは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.
------------
于 2013-01-29T16:27:04.223 に答える