MySQL: Tworzenie tabeli z błędem FK (errno 150)

Stworzyłem model zMySQL Workbench i próbuję teraz zainstalować go na serwerze mysql.

Za pomocąPlik> Eksportuj> Przekaż Inżynierowi SQL Utwórz Skrypt ... wypisuje dla mnie ładny duży plik ze wszystkimi ustawieniami, o które proszę. Przełączam się naNarzędzia GUI MySQL (konkretnie Przeglądarka zapytań) i załaduj ten skrypt (zauważ, że będę tworzyć jedno oficjalne narzędzie MySQL na inne). Jednak, gdy próbuję wykonać ten plik, wciąż powtarzam ten sam błąd

SQLSTATE [HY000]: Błąd ogólny: 1005 Nie można utworzyć tabeli „./srs_dev/location.frm” (errno: 150)

„OK”, mówię sobie, coś jest nie tak z tabelą lokalizacji. Sprawdzam więc definicję w pliku wyjściowym.

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

Wygląda mi dobrze. Przypuszczam, że może coś jest nie tak z przeglądarką zapytań, więc umieściłem ten plik na serwerze i próbuję załadować go w ten sposób

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

I dostaję ten sam błąd. Zaczynam więc Google z tym problemem i znajduję wszystkie rodzaje kont, które mówią o błędzie z tabelami stylów InnoDB, które nie działają z kluczami obcymi, a poprawką jest dodanie „SET FOREIGN_KEY_CHECKS = 0;” do skryptu SQL. Jak widać, jest to już część pliku, który wypluł MySQL Workbench.

Zatem moje pytanie brzmi: dlaczego to nie działa, gdy robię to, co myślę, że powinienem robić?

Informacje o wersji:

MySQL: 5.0.45Narzędzia GUI: 1.2.17Workbench: 5.0.30

questionAnswers(4)

yourAnswerToTheQuestion