これは、スキーマをデータベースに転送する際に発生するエラーです。エラー:エラー#1215:外部キー制約を追加できません
ERROR: Error 1215: Cannot add foreign key constraint.
私はこのチェックリストを作成しましたが、私はこれらのどれも信じていません。
Db InnoDBはありますか?はい
すべてのテーブルがInnoDBですか?はい
参照テーブルにユニークなインデックスがありますか?はい
参照されて参照する列は、まったく同じ型ですか?
はい、私も試してみました:ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
保証テーブルの最後に。まだ動作しません。
私はそれが保証のテーブルのどこかにあると思うので、ここでは完全なスクリプトですが、私が試したものはすべて動作しません。
---------------------------------------------------------------------------
-- 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 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`warranty`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`warranty` ;
CREATE TABLE IF NOT EXISTS `mydb`.`warranty` (
`warranty_id` VARCHAR(255) NOT NULL,
`warranty_number` VARCHAR(25) NOT NULL COMMENT 'Warranty Number',
`warranty_effective_date` DATETIME NOT NULL COMMENT 'Warranty Effective Date',
`payment_option` VARCHAR(100) NOT NULL COMMENT 'Pay monthly or annunally, or all at once',
`total_amount` DOUBLE NOT NULL COMMENT 'Total Warranty Amount\n',
`active` TINYINT(1) NOT NULL,
`date_created` DATETIME NOT NULL,
`additional_information` LONGTEXT NULL COMMENT 'Additional information for finance, and car dealership.\nWill not be seen by customer',
PRIMARY KEY (`warranty_id`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`warranty_edit`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`warranty_edit` ;
CREATE TABLE IF NOT EXISTS `mydb`.`warranty_edit` (
`warranty_edit_id` VARCHAR(255) NOT NULL,
`fk_warranty_id_3` VARCHAR(255) NOT NULL COMMENT 'Foreign Key to warranty table',
`edited_table_name` VARCHAR(45) NOT NULL COMMENT 'Name of the table that was updated',
`edited_date` DATETIME NOT NULL COMMENT 'When record is inserted into DB',
`edited_by` VARCHAR(45) NOT NULL COMMENT 'Who updated the records',
`additional_information` LONGTEXT NULL COMMENT 'Extra information if needed',
PRIMARY KEY (`warranty_edit_id`),
INDEX `policy_id_idx` (`fk_warranty_id_3` ASC),
CONSTRAINT `warranty_id`
FOREIGN KEY (`fk_warranty_id_3`)
REFERENCES `mydb`.`warranty` (`warranty_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`bill`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`bill` ;
CREATE TABLE IF NOT EXISTS `mydb`.`bill` (
`bill_id` VARCHAR(255) NOT NULL,
`fk_warranty_id_1` VARCHAR(255) NOT NULL COMMENT 'Foreign Key of bill table',
`due_date` DATETIME NOT NULL COMMENT 'Payment due date',
`minimum_payment` DOUBLE NOT NULL COMMENT 'Minimum payment or per bill payment',
`created_date` DATETIME NOT NULL COMMENT 'Bill generated date',
`balance` DOUBLE NOT NULL COMMENT 'Customer makes partial payment, this has remaining balance',
`status` VARCHAR(45) NOT NULL COMMENT 'Paid, or Unpaid',
PRIMARY KEY (`bill_id`),
INDEX `warranty_id_idx` (`fk_warranty_id_1` ASC),
CONSTRAINT `warranty_id`
FOREIGN KEY (`fk_warranty_id_1`)
REFERENCES `mydb`.`warranty` (`warranty_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`vehicle`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`vehicle` ;
CREATE TABLE IF NOT EXISTS `mydb`.`vehicle` (
`vehicle_id` VARCHAR(255) NOT NULL COMMENT 'Foreign Key to Warranty Table',
`fk_warranty_id_2` VARCHAR(255) NOT NULL,
`year` CHAR(4) NOT NULL COMMENT 'Year of Car',
`make` VARCHAR(45) NOT NULL,
`model` VARCHAR(45) NOT NULL COMMENT 'Model',
`color` VARCHAR(45) NULL COMMENT 'Color',
`trim` VARCHAR(45) NULL COMMENT 'Trim',
`milage` INT NOT NULL COMMENT 'Mileage',
`vin_number` VARCHAR(20) NOT NULL COMMENT 'VIN Number',
`vehicle_plate_number` VARCHAR(20) NOT NULL COMMENT 'Registered Plate',
`vehicle_registered_state` VARCHAR(45) NOT NULL COMMENT 'Registered State',
`aftermarket_parts` VARCHAR(45) NULL COMMENT 'After Market Parts Not Included (Information)',
`created_date` DATETIME NOT NULL COMMENT 'Created Date',
PRIMARY KEY (`vehicle_id`),
INDEX `warranty_id_idx` (`fk_warranty_id_2` ASC),
CONSTRAINT `warranty_id`
FOREIGN KEY (`fk_warranty_id_2`)
REFERENCES `mydb`.`warranty` (`warranty_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`coverage`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`coverage` ;
CREATE TABLE IF NOT EXISTS `mydb`.`coverage` (
`coverage_id` VARCHAR(255) NOT NULL,
`coverage_package` VARCHAR(45) NOT NULL COMMENT 'Name of the package selected',
`fk_vehicle_id` VARCHAR(255) NOT NULL,
`detuctible` FLOAT NOT NULL,
`terms` VARCHAR(45) NOT NULL,
PRIMARY KEY (`coverage_id`),
INDEX `vehicle_id_idx` (`fk_vehicle_id` ASC),
CONSTRAINT `vehicle_id`
FOREIGN KEY (`fk_vehicle_id`)
REFERENCES `mydb`.`vehicle` (`vehicle_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`warranty_coverage`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`warranty_coverage` ;
CREATE TABLE IF NOT EXISTS `mydb`.`warranty_coverage` (
`warranty_coverage_id` VARCHAR(255) NOT NULL,
`fk_warranty_id_4` VARCHAR(255) NOT NULL,
`fk_coverage_id` VARCHAR(255) NOT NULL,
`active` TINYINT(1) NOT NULL,
PRIMARY KEY (`warranty_coverage_id`),
INDEX `warranty_id_idx` (`fk_warranty_id_4` ASC),
INDEX `coverage_id_idx` (`fk_coverage_id` ASC),
CONSTRAINT `warranty_id`
FOREIGN KEY (`fk_warranty_id_4`)
REFERENCES `mydb`.`warranty` (`warranty_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `coverage_id`
FOREIGN KEY (`fk_coverage_id`)
REFERENCES `mydb`.`coverage` (`coverage_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`payment`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`payment` ;
CREATE TABLE IF NOT EXISTS `mydb`.`payment` (
`payment_id` VARCHAR(255) NOT NULL,
`fk_bill_id` VARCHAR(255) NOT NULL COMMENT 'Foreign Key to bill table',
`paid_date` DATETIME NOT NULL COMMENT 'Payment made date',
`amount` DOUBLE NOT NULL COMMENT 'How much is paid',
`payment_method` VARCHAR(100) NOT NULL COMMENT 'Credit/Debit/Check/E-Withdrawl',
`payer_first_name` VARCHAR(45) NULL,
`payer_last_name` VARCHAR(45) NULL COMMENT 'Payer Last Name',
`card_number` VARCHAR(45) NULL COMMENT 'Credit or Debit Card Number',
`zip_code` VARCHAR(10) NULL,
`card_expiration_date` VARCHAR(10) NULL COMMENT 'Expiration Date of Credit Card',
`card_type` VARCHAR(25) NULL COMMENT 'Visa, Mastercard, American Express, Discover, other',
`debit_or_credit` VARCHAR(45) NULL COMMENT 'Is the card debit or credit',
`bank_name` VARCHAR(100) NULL COMMENT 'Bank Name for E-Withdrawal',
`account_number` VARCHAR(20) NULL COMMENT 'Account Number of Payer',
`routing_number` VARCHAR(20) NULL COMMENT 'Bank Routing Number',
`check_number` VARCHAR(20) NULL,
`addition_information` LONGTEXT NULL,
`created_date` DATETIME NOT NULL COMMENT 'When the payment is created',
PRIMARY KEY (`payment_id`),
INDEX `bill_id_idx` (`fk_bill_id` ASC),
CONSTRAINT `bill_id`
FOREIGN KEY (`fk_bill_id`)
REFERENCES `mydb`.`bill` (`bill_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = ' ';
SET [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;
私はそれらをCONSTRAINT 'warranty_id_warranty_edit'、CONSTRAINT' warranty_id_bill'、CONSTRAINT' warranty_id_vehicle'、CONSTRAINT 'vehicle_id_coverage'に変更しました。だから、彼らはすべて異なっていますが、それでもまだ古いエラーが出ています。それは親テーブル上にあります。 –