MySQL: Création de la table avec FK erreur (errno 150)

J'ai créé un modèle avec MySQL Workbench et je suis en train d'essayer de l'installer sur un serveur mysql.

À l'aide de Fichier > Export > Avant d'Ingénieur SQL CRÉER un Script... il sort un bon gros fichier pour moi, avec tous les paramètres que je demande. J'ai passer de l'un à MySQL GUI Tools (le Navigateur de Requêtes en particulier) et de la charge, ce script (notez que je vais former un officiel de MySQL outil à un autre). Cependant, lorsque j'essaie de l'exécution de ce fichier, j'obtiens la même erreur encore et

SQLSTATE[HY000]: General error: 1005
Ne peut pas créer de table
'./srs_dev/emplacement.frm' (errno: 150)

"OK", dis-je à moi-même, quelque chose de mal avec l'emplacement de la table. J'ai donc vérifier la définition dans le fichier de sortie.

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

Semble ok pour moi. J'ai supposer que peut-être quelque chose est incorrect avec le Navigateur de Requêtes, alors j'ai mis ce fichier sur le serveur et que vous essayez de charger de cette façon

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

Et j'obtiens la même erreur. Donc je commence à Google ce problème et de trouver tous les types de comptes qui parlent une erreur avec InnoDB tables de style qui échouent avec les clés étrangères, et la solution est d'ajouter "SET FOREIGN_KEY_CHECKS=0;" pour le script SQL. Eh bien, comme vous pouvez le voir, c'est déjà une partie du fichier que MySQL Workbench recraché.

Donc, ma question est alors, pourquoi ça ne marche pas quand je fais ce que je pense que je suis censé faire?

Version Info:

  • MySQL: 5.0.45

  • Outils d'interface graphique: 1.2.17
  • Workbench: 5.0.30
  • Bien que n'étant pas le cas dans votre SQL, la même erreur est aussi causée par ne pas avoir unique clé étrangère noms entre les tables.
InformationsquelleAutor Peter Bailey | 2009-07-05