当尝试构建一个由两个表组成的 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/