我使用MySQL Workbench创建了一个模型,现在想将其安装到mysql服务器上。通过使用文件>导出>正向工程SQL创建脚本...,它为我输出了一个很大的文件,其中包含我要求的所有设置。我切换到MySQL GUI Tools(具体来说是查询浏览器)并加载此脚本(请注意,我正在从一个官方的MySQL工具切换到另一个)。然而,当我尝试执行此文件时,我一遍又一遍地得到相同的错误信息。
我也遇到了同样的错误。于是我开始谷歌这个问题,发现有各种各样的帐户都在谈论一个与InnoDB风格表相关的错误,它会在外键失败时失败,修复方法是将"SET FOREIGN_KEY_CHECKS=0;"添加到SQL脚本中。但是,正如您所看到的,这已经是MySQL Workbench生成的文件的一部分了。那么,我的问题是,我做了我认为应该做的事情,为什么这不起作用呢?
版本信息:
MySQL:5.0.45 GUI工具:1.2.17 Workbench:5.0.30
我对自己说:"好吧",表格位置有问题。所以我查看了输出文件中的定义。SQLSTATE[HY000]: General error: 1005 Can't create table './srs_dev/location.frm' (errno: 150)
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) ;
我认为看起来没问题。我猜测可能是查询浏览器出了问题,所以我将这个文件放在服务器上并尝试以这种方式加载它。
] mysql -u admin -p -D dbname < path/to/create_file.sql
我也遇到了同样的错误。于是我开始谷歌这个问题,发现有各种各样的帐户都在谈论一个与InnoDB风格表相关的错误,它会在外键失败时失败,修复方法是将"SET FOREIGN_KEY_CHECKS=0;"添加到SQL脚本中。但是,正如您所看到的,这已经是MySQL Workbench生成的文件的一部分了。那么,我的问题是,我做了我认为应该做的事情,为什么这不起作用呢?
版本信息:
MySQL:5.0.45 GUI工具:1.2.17 Workbench:5.0.30