2016-03-09 6 views
0

При попытке построить базу данных mysql, состоящую из двух таблиц, я почему-то получаю сообщение об ошибке 1215, и я не могу найти причину , Оба поля одного типа. Я пытаюсь сделать это с помощью Workbench MySQL. Кто-нибудь знает причину этой ошибки?ОШИБКА: Ошибка 1215: не удается добавить ограничение внешнего ключа, даже если оба поля одного типа

-- MySQL Workbench Forward Engineering 

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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 [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

ответ

0

Вы определили первичный ключ 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. Это должно решить проблему, хотя ваше намерение может быть чем-то другим.

0

Вы можете обратиться к столбцу, который является первичным ключом или уникальным атрибутом. Если вы хотите обратиться к самому идентификатору запроса, сделайте его как первичный ключ или уникальный атрибут. или измените таблицу Words_frequency, чтобы обратиться к tweetID.

 Смежные вопросы

  • Нет связанных вопросов^_^