1. ホーム
  2. mysql

[解決済み] MySQL エラー 1215。外部キー制約を追加できません

2022-03-14 03:28:19

質問

新しいスキーマをデータベースサーバーに転送しようとしているのですが、なぜこのようなエラーが発生するのかがわかりません。

ここで答えを探そうとしましたが、私が見つけたすべてのものは、データベースエンジンをInnoDBに設定するか、外部キーとして使おうとしているキーが、それ自身のテーブルの主キーであることを確認するようにと書いてありました。 私が間違っていなければ、この2つのことを行いました。 他にどうすればいいでしょうか?

Executing SQL script in server

ERROR: Error 1215: Cannot add foreign key constraint

-- -----------------------------------------------------
-- Table `Alternative_Pathways`.`Clients_has_Staff`
-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` (
  `Clients_Case_Number` INT NOT NULL ,
  `Staff_Emp_ID` INT NOT NULL ,
  PRIMARY KEY (`Clients_Case_Number`, `Staff_Emp_ID`) ,
  INDEX `fk_Clients_has_Staff_Staff1_idx` (`Staff_Emp_ID` ASC) ,
  INDEX `fk_Clients_has_Staff_Clients_idx` (`Clients_Case_Number` ASC) ,
  CONSTRAINT `fk_Clients_has_Staff_Clients`
    FOREIGN KEY (`Clients_Case_Number` )
    REFERENCES `Alternative_Pathways`.`Clients` (`Case_Number` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Clients_has_Staff_Staff1`
    FOREIGN KEY (`Staff_Emp_ID` )
    REFERENCES `Alternative_Pathways`.`Staff` (`Emp_ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

SQL スクリプトの実行が終了しました: ステートメント。7成功、1失敗

以下は、親テーブルのSQLです。

CREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients` (
  `Case_Number` INT NOT NULL ,
  `First_Name` CHAR(10) NULL ,
  `Middle_Name` CHAR(10) NULL ,
  `Last_Name` CHAR(10) NULL ,
  `Address` CHAR(50) NULL ,
  `Phone_Number` INT(10) NULL ,
  PRIMARY KEY (`Case_Number`) )
ENGINE = InnoDB

CREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Staff` (
  `Emp_ID` INT NOT NULL ,
  `First_Name` CHAR(10) NULL ,
  `Middle_Name` CHAR(10) NULL ,
  `Last_Name` CHAR(10) NULL ,
  PRIMARY KEY (`Emp_ID`) )
ENGINE = InnoDB

解決方法は?

推測ですが Clients.Case_Number および/または Staff.Emp_ID とは全く同じデータ型ではありません。 Clients_has_Staff.Clients_Case_NumberClients_has_Staff.Staff_Emp_ID .

おそらく、親テーブルのカラムは INT UNSIGNED ?

両方のテーブルで全く同じデータ型である必要があります。