新しいスキーマをDBサーバーにフォワードエンジニアリングしようとしているのですが、なぜこのエラーが出るのかわかりません。 ここで答えを探そうとしましたが、見つけたものはすべて、dbエンジンを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
外部キー制約のエラーが発生する理由。
1.すべてのテーブルでエンジンとしてInnoDBを使用していない。 2.対象テーブルの存在しないキーを参照しようとしている。 それが他のテーブルのキーであることを確認してください(それはプライマリまたはユニークキーであることができます)。 3.列のタイプが同じではない(例外として、参照先テーブルの列はNULL可能である)。 4.PK/FKがvarcharの場合、照合順序が両方とも同じであることを確認してください。
**更新:********************。
5.原因の一つは、「ON DELETE SET NULL」に使用しているカラムが、NULLに定義されていないことです。そのため、そのカラムがデフォルトでNULLに設定されていることを確認してください。
これらを確認してください。