为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL无法添加外键约束

MySQL无法添加外键约束

沧海一幻觉 2019-07-08 16:08:54
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 = InnoDBDEFAULT 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 = InnoDBDEFAULT CHARACTER SET = utf8;
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

要查找特定错误,请运行以下命令:

SHOW ENGINE INNODB STATUS;

看看LATEST FOREIGN KEY ERROR部分。

子列的数据类型必须与父列完全匹配。例如,因为medicalhistory.MedicalHistoryIDINTPatient.MedicalHistory也需要是INT,而不是SMALLINT.

此外,您应该运行该查询。set foreign_key_checks=0在运行DDL之前,您可以任意顺序创建表,而不必在相关子表之前创建所有父表。


查看完整回答
反对 回复 2019-07-08
?
交互式爱情

TA贡献1712条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-07-08
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

  • 发动机

    应该是一样的

    例如InnoDB

  • 数据类型

    应该是一样的,长度也是一样的。

    例如VARCHAR(20)

  • 校对

    列字符集应该是相同的。

    例如UTF8
    注意:即使您的表具有相同的排序规则,列也可能有不同的排序规则。

  • 独树一帜

    -外键应指唯一的字段

    (通常是主键)

    在参考表中。


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 1268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信