MySQL无法添加外键约束

MySQL无法添加外键约束

因此,我试图将外键约束作为项目要求添加到我的数据库中,并且它第一次或两次在不同的表上工作,但是我有两个表,当我试图添加外键约束时,会在两个表上出错。我得到的错误消息是:


错误1215(HY000):无法添加外键约束


这是我用来创建表的SQL,两个违规的表是Patient和Appointment.


SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=1;

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';


CREATE SCHEMA IF NOT EXISTS `doctorsoffice` DEFAULT CHARACTER SET utf8 ;

USE `doctorsoffice` ;


-- -----------------------------------------------------

-- Table `doctorsoffice`.`doctor`

-- -----------------------------------------------------

DROP TABLE IF EXISTS `doctorsoffice`.`doctor` ;


CREATE  TABLE IF NOT EXISTS `doctorsoffice`.`doctor` (

  `DoctorID` INT(11) NOT NULL AUTO_INCREMENT ,

  `FName` VARCHAR(20) NULL DEFAULT NULL ,

  `LName` VARCHAR(20) NULL DEFAULT NULL ,

  `Gender` VARCHAR(1) NULL DEFAULT NULL ,

  `Specialty` VARCHAR(40) NOT NULL DEFAULT 'General Practitioner' ,

  UNIQUE INDEX `DoctorID` (`DoctorID` ASC) ,

  PRIMARY KEY (`DoctorID`) )

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8;



-- -----------------------------------------------------

-- Table `doctorsoffice`.`medicalhistory`

-- -----------------------------------------------------

DROP TABLE IF EXISTS `doctorsoffice`.`medicalhistory` ;


CREATE  TABLE IF NOT EXISTS `doctorsoffice`.`medicalhistory` (

  `MedicalHistoryID` INT(11) NOT NULL AUTO_INCREMENT ,

  `Allergies` TEXT NULL DEFAULT NULL ,

  `Medications` TEXT NULL DEFAULT NULL ,

  `ExistingConditions` TEXT NULL DEFAULT NULL ,

  `Misc` TEXT NULL DEFAULT NULL ,

  UNIQUE INDEX `MedicalHistoryID` (`MedicalHistoryID` ASC) ,

  PRIMARY KEY (`MedicalHistoryID`) )

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8;

沧海一幻觉
浏览 1270回答 3
3回答

红颜莎娜

要查找特定错误,请运行以下命令:SHOW ENGINE INNODB STATUS;看看LATEST FOREIGN KEY ERROR部分。子列的数据类型必须与父列完全匹配。例如,因为medicalhistory.MedicalHistoryID是INT, Patient.MedicalHistory也需要是INT,而不是SMALLINT.此外,您应该运行该查询。set foreign_key_checks=0在运行DDL之前,您可以任意顺序创建表,而不必在相关子表之前创建所有父表。

交互式爱情

我把一个字段设置为“未签名”,另一个没有。一旦我将两列都设置为未签名,它就能工作了。

叮当猫咪

发动机应该是一样的例如InnoDB数据类型应该是一样的,长度也是一样的。例如VARCHAR(20)校对列字符集应该是相同的。例如UTF8注意:即使您的表具有相同的排序规则,列也可能有不同的排序规则。独树一帜-外键应指唯一的字段(通常是主键)在参考表中。
打开App,查看更多内容
随时随地看视频慕课网APP