MySql和创建外键

时间:2017-04-02 16:08:06

标签: mysql sql foreign-keys constraints

    -- MySQL Script generated by MySQL Workbench
-- Sun Apr  2 17:50:54 2017
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

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,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema SintalDB
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema SintalDB
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `SintalDB` DEFAULT CHARACTER SET utf8 COLLATE utf8_slovenian_ci ;
USE `SintalDB` ;

-- -----------------------------------------------------
-- Table `SintalDB`.`User`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `SintalDB`.`User` (
  `PK_User` INT NOT NULL,
  `Name` VARCHAR(15) NOT NULL,
  `Surname` VARCHAR(25) NOT NULL,
  `Phone_Nr` VARCHAR(13) NOT NULL,
  `Email` VARCHAR(90) NOT NULL,
  `Car_Reg_Nr` VARCHAR(10) NULL,
  `Username` VARCHAR(20) NOT NULL,
  `Password` VARCHAR(20) NOT NULL,
  `Servis_Input_Rights` TINYINT(1) NOT NULL,
  `Servis_Output_Rights` TINYINT(1) NOT NULL,
  `Servis_Delete_Rights` TINYINT(1) NOT NULL,
  `Admin_Rights` TINYINT(1) NOT NULL,
  PRIMARY KEY (`PK_User`))
ENGINE = InnoDB
AUTO_INCREMENT = 1
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_slovenian_ci;


-- -----------------------------------------------------
-- Table `SintalDB`.`City`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `SintalDB`.`City` (
  `PK_City` INT NOT NULL,
  `Name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`PK_City`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_slovenian_ci;


-- -----------------------------------------------------
-- Table `SintalDB`.`Company`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `SintalDB`.`Company` (
  `PK_Company` INT NOT NULL,
  `Name` VARCHAR(25) NOT NULL,
  `Address` VARCHAR(45) NOT NULL,
  `Address_Nr` VARCHAR(4) NOT NULL,
  `FK_City` INT NOT NULL,
  PRIMARY KEY (`PK_Company`),
  INDEX `FK_City_Company_fkn_idx` (`FK_City` ASC),
  CONSTRAINT `FK_City_Company_fkn`
    FOREIGN KEY (`FK_City`)
    REFERENCES `SintalDB`.`City` (`PK_City`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_slovenian_ci;


-- -----------------------------------------------------
-- Table `SintalDB`.`Facility`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `SintalDB`.`Facility` (
  `PK_Facility_AD` VARCHAR(6) NOT NULL,
  `Name` VARCHAR(60) NOT NULL,
  `Address` VARCHAR(45) NOT NULL,
  `Address_Nr` VARCHAR(4) NOT NULL,
  `FK_City` INT NOT NULL,
  `FK_Company_Affiliation` INT NOT NULL,
  PRIMARY KEY (`PK_Facility_AD`),
  INDEX `FK_City_Facility_fkn_idx` (`FK_City` ASC),
  INDEX `FK_Company_Affiliation_Facility_fkn_idx` (`FK_Company_Affiliation` ASC),
  CONSTRAINT `FK_City_Facility_fkn`
    FOREIGN KEY (`FK_City`)
    REFERENCES `SintalDB`.`City` (`PK_City`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `FK_Company_Affiliation_Facility_fkn`
    FOREIGN KEY (`FK_Company_Affiliation`)
    REFERENCES `SintalDB`.`Company` (`PK_Company`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_slovenian_ci;


-- -----------------------------------------------------
-- Table `SintalDB`.`Servis`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `SintalDB`.`Servis` (
  `PK_Servis_Nr` VARCHAR(11) NOT NULL,
  `FK_Facility_AD` VARCHAR(6) NOT NULL,
  `Description` VARCHAR(255) NOT NULL,
  `Date_Recived` DATETIME NOT NULL,
  `FK_User_Commited` INT NULL,
  `Date_Commited` DATETIME NULL,
  `FK_User_Done` INT NULL,
  `Date_Done` DATETIME NULL,
  PRIMARY KEY (`PK_Servis_Nr`),
  INDEX `FK_User_Servis_fkn_idx` (`FK_User_Commited` ASC, `FK_User_Done` ASC),
  INDEX `FK_Facility_Servis_fkn_idx` (`FK_Facility_AD` ASC),
  CONSTRAINT `FK_User_Servis_fkn`
    FOREIGN KEY (`FK_User_Commited` , `FK_User_Done`)
    REFERENCES `SintalDB`.`User` (`PK_User` , `PK_User`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `FK_Facility_Servis_fkn`
    FOREIGN KEY (`FK_Facility_AD`)
    REFERENCES `SintalDB`.`Facility` (`PK_Facility_AD`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_slovenian_ci;


-- -----------------------------------------------------
-- Table `SintalDB`.`ServisNote`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `SintalDB`.`ServisNote` (
  `PK_ServisNote` INT NOT NULL,
  `Note` VARCHAR(255) NOT NULL,
  `FK_User_Note` INT NOT NULL,
  `Date_Created` DATETIME NOT NULL,
  `FK_Servis_Nr` VARCHAR(11) NOT NULL,
  PRIMARY KEY (`PK_ServisNote`),
  INDEX `FK_Servis_ServisNote_fkn_idx` (`FK_Servis_Nr` ASC),
  INDEX `FK_User_ServisNote_fkn_idx` (`FK_User_Note` ASC),
  CONSTRAINT `FK_Servis_ServisNote_fkn`
    FOREIGN KEY (`FK_Servis_Nr`)
    REFERENCES `SintalDB`.`Servis` (`PK_Servis_Nr`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `FK_User_ServisNote_fkn`
    FOREIGN KEY (`FK_User_Note`)
    REFERENCES `SintalDB`.`User` (`PK_User`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_slovenian_ci;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

这是我的sql文件,运行sql文件后出错

错误代码:1215。无法添加外键约束

  

17:52:08创建表如果不是SintalDB ServisPK_Servis_Nr
  FK_Facility_AD VARCHAR(11)NOT NULL,Description VARCHAR(6)NOT   NULL,Date_Recived VARCHAR(255)NOT NULL,FK_User_Commited DATETIME   NOT NULL,Date_Commited INT NULL,FK_User_Done DATETIME   NULL,Date_Done INT NULL,PK_Servis_Nr DATETIME NULL,
  PRIMARY KEY(FK_User_Servis_fkn_idx),INDEX FK_User_Commited   (FK_User_Done ASC,FK_Facility_Servis_fkn_idx ASC),INDEX   FK_Facility_ADFK_User_Servis_fkn ASC),CONSTRAINT   FK_User_Commited外键(FK_User_Done,   SintalDB)参考UserPK_UserPK_User,   FK_Facility_Servis_fkn)在更新时不执行任何操作,不执行任何操作,
  约束FK_Facility_AD外键(SintalDB)   参考FacilityPK_Facility_ADprivate double height;)ON DELETE NO   行动更新无动作)发动机= InnoDB默认字符集   = utf8 COLLATE = utf8_slovenian_ci错误代码:1215。无法添加外键约束0.063秒

1 个答案:

答案 0 :(得分:2)

请检查:Adding foreign key on multiple columns

我认为你必须添加两个外键才能引用同一列。 您可以替换此代码并进行测试。

-- -----------------------------------------------------
-- Table `SintalDB`.`Servis`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `SintalDB`.`Servis` (
  `PK_Servis_Nr` VARCHAR(11) NOT NULL,
  `FK_Facility_AD` VARCHAR(6) NOT NULL,
  `Description` VARCHAR(255) NOT NULL,
  `Date_Recived` DATETIME NOT NULL,
  `FK_User_Commited` INT NULL,
  `Date_Commited` DATETIME NULL,
  `FK_User_Done` INT NULL,
  `Date_Done` DATETIME NULL,
  PRIMARY KEY (`PK_Servis_Nr`),
  INDEX `FK_User_Servis_fkn_idx` (`FK_User_Commited` ASC, `FK_User_Done` ASC),
  INDEX `FK_Facility_Servis_fkn_idx` (`FK_Facility_AD` ASC),
  CONSTRAINT `FK_User_Servis_fkn`
    FOREIGN KEY (`FK_User_Commited`)
    REFERENCES `SintalDB`.`User` (`PK_User` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `FK_User_Servis_2_fkn`
    FOREIGN KEY (`FK_User_Done`)
    REFERENCES `SintalDB`.`User` (`PK_User`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `FK_Facility_Servis_fkn`
    FOREIGN KEY (`FK_Facility_AD`)
    REFERENCES `SintalDB`.`Facility` (`PK_Facility_AD`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_slovenian_ci;