mysql - 错误: Error 1215: Cannot add foreign key constraint even when both fields are of the same type

标签 mysql database key constraints workbench

当尝试构建一个由两个表组成的 mysql 数据库时,由于某种原因我收到错误 1215 并且我无法找到原因。两个字段的类型相同。我正在尝试使用 MySQL 工作台来做到这一点。有人知道这个错误的原因吗?

-- 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 mydb
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`Classified_tweets`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Classified_tweets` (
  `QueryID` INT NULL,
  `TweetID` BIGINT NOT NULL,
  `TweetKeyword` VARCHAR(45) NULL,
  `TweetUsername` VARCHAR(45) NULL,
  `TweetDate` VARCHAR(45) NULL,
  `TweetLocation` VARCHAR(45) NULL,
  `TweetContent` VARCHAR(150) NULL,
  `TweetLabel` TINYINT(1) NULL,
  PRIMARY KEY (`TweetID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Words_frequency`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Words_frequency` (
  `QueryID` INT NOT NULL,
  `Word` VARCHAR(45) NOT NULL,
  `Label` INT NULL,
  `Frequency` VARCHAR(45) NULL,
  PRIMARY KEY (`QueryID`, `Word`),
  INDEX `fk_Words_frequency_Classified_tweets_idx` (`QueryID` ASC),
  CONSTRAINT `fk_Words_frequency_Classified_tweets`
    FOREIGN KEY (`QueryID`)
    REFERENCES `mydb`.`Classified_tweets` (`QueryID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


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

最佳答案

您已将 Classified_tweets 上的主键定义为 TweetID

您应该将此列用于外键关系。也许:

CREATE TABLE IF NOT EXISTS `mydb`.`Words_frequency` (
  `TweetID` BIGINT NOT NULL,
  `Word` VARCHAR(45) NOT NULL,
  `Label` INT NULL,
  `Frequency` VARCHAR(45) NULL,
  PRIMARY KEY (`QueryID`, `Word`),
  INDEX `fk_Words_frequency_Classified_tweets_idx` (`QueryID` ASC),
  CONSTRAINT `fk_Words_frequency_Classified_tweets`
    FOREIGN KEY (`TweetID`)
    REFERENCES `mydb`.`Classified_tweets` (`TweetID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
);

注意:我将第一列从 QueryId 更改为 TweetId。这应该可以解决问题,尽管您的意图可能是其他的。

关于mysql - 错误: Error 1215: Cannot add foreign key constraint even when both fields are of the same type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35881421/

相关文章:

mysql - MySQL .zip 和 .msi 下载的区别

Mysql:具有最小值的行并根据大小写优先考虑条件

sql - ConstraintViolationException 在 JavaEE 中将应用程序部署到 Glassfish

mysql - 按两个字段排序 - 索引

database - 用于数据库抽象的惯用 haskell

PHP:作为数组中键的值之一

character-encoding - 如何从键盘模拟 NUL 字符?

php - 在 mysql 数据库中插入复选框值

mysql - 获取同一列的总计,但每个 SELECT 别名都包含一个特定的字符串

key - GPG 不提示输入密码