MySQL: Tabelle mit FK-Fehler erstellen (errno 150)

Ich habe ein Modell mit erstelltMySQL Workbench und versuche jetzt, es auf einem MySQL-Server zu installieren.

VerwendenDatei> Exportieren> Forward Engineer SQL CREATE-Skript ... es gibt eine schöne große Datei für mich aus, mit allen Einstellungen, nach denen ich frage. Ich wechsle zuMySQL GUI Tools (speziell der Abfrage-Browser) und laden Sie dieses Skript (beachten Sie, dass ich von einem offiziellen MySQL-Tool zu einem anderen wechseln werde). Wenn ich jedoch versuche, diese Datei tatsächlich auszuführen, wird immer wieder derselbe Fehler angezeigt

SQLSTATE [HY000]: Allgemeiner Fehler: 1005 Tabelle './srs_dev/location.frm' kann nicht erstellt werden (Fehlernummer: 150)

"OK", sage ich mir, mit der Ortstabelle stimmt etwas nicht. Also überprüfe ich die Definition in der Ausgabedatei.

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';

-- -----------------------------------------------------
-- Table `state`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `state` ;

CREATE  TABLE IF NOT EXISTS `state` (
  `state_id` INT NOT NULL AUTO_INCREMENT ,
  `iso_3166_2_code` VARCHAR(2) NOT NULL ,
  `name` VARCHAR(60) NOT NULL ,
  PRIMARY KEY (`state_id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `brand`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `brand` ;

CREATE  TABLE IF NOT EXISTS `brand` (
  `brand_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  `domain` VARCHAR(45) NOT NULL ,
  `manager_name` VARCHAR(100) NULL ,
  `manager_email` VARCHAR(255) NULL ,
  PRIMARY KEY (`brand_id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `location`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `location` ;

CREATE  TABLE IF NOT EXISTS `location` (
  `location_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(255) NOT NULL ,
  `address_line_1` VARCHAR(255) NULL ,
  `address_line_2` VARCHAR(255) NULL ,
  `city` VARCHAR(100) NULL ,
  `state_id` TINYINT UNSIGNED NULL DEFAULT NULL ,
  `postal_code` VARCHAR(10) NULL ,
  `phone_number` VARCHAR(20) NULL ,
  `fax_number` VARCHAR(20) NULL ,
  `lat` DECIMAL(9,6) NOT NULL ,
  `lng` DECIMAL(9,6) NOT NULL ,
  `contact_url` VARCHAR(255) NULL ,
  `brand_id` TINYINT UNSIGNED NOT NULL ,
  `summer_hours` VARCHAR(255) NULL ,
  `winter_hours` VARCHAR(255) NULL ,
  `after_hours_emergency` VARCHAR(255) NULL ,
  `image_file_name` VARCHAR(100) NULL ,
  `manager_name` VARCHAR(100) NULL ,
  `manager_email` VARCHAR(255) NULL ,
  `created_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (`location_id`) ,
  CONSTRAINT `fk_location_state`
    FOREIGN KEY (`state_id` )
    REFERENCES `state` (`state_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_location_brand`
    FOREIGN KEY (`brand_id` )
    REFERENCES `brand` (`brand_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

CREATE INDEX `fk_location_state` ON `location` (`state_id` ASC) ;

CREATE INDEX `fk_location_brand` ON `location` (`brand_id` ASC) ;

CREATE INDEX `idx_lat` ON `location` (`lat` ASC) ;

CREATE INDEX `idx_lng` ON `location` (`lng` ASC) ;

Sieht für mich gut aus. Ich vermute, dass möglicherweise etwas mit dem Abfragebrowser nicht stimmt, also habe ich diese Datei auf dem Server abgelegt und versuche, sie auf diese Weise zu laden

] mysql -u admin -p -D dbname < path/to/create_file.sql

Und ich bekomme den gleichen Fehler. Daher beginne ich mit Google dieses Problem und finde alle Arten von Konten, die über einen Fehler mit InnoDB-Stiltabellen sprechen, bei denen ein Fehler mit Fremdschlüsseln auftritt. Die Korrektur besteht darin, "SET FOREIGN_KEY_CHECKS = 0;" zum SQL-Skript. Wie Sie sehen, ist dies bereits Teil der von MySQL Workbench ausgegebenen Datei.

Meine Frage ist also, warum funktioniert das nicht, wenn ich tue, was ich denke, dass ich tun soll?

Versions Information:

MySQL: 5.0.45GUI-Tools: 1.2.17Werkbank: 5.0.30

Antworten auf die Frage(4)

Ihre Antwort auf die Frage