MySQL:の作成テーブルFKエラー(errno150)
-
23-08-2019 - |
質問
私がモデル MySQLワークベンチ 午前述のようにインストールするmysqlサーバーです。
を使用 ファイル>エクスポートを進エンジニアSQLスクリプトの作成... として出力も大きなファイルの私にとって、すべての設定をお願いします。I切り替え MySQLのGUIツール (クエリをブラウザを具体的には)と負荷までこのスクリプト注が行ってい形の一部はMySQLのツールた。しかし、私は実際に実行するこのファイルでも同様のエラーや
SQLSTATE[HY000]:一般的なエラー:1005 できなテーブルの作成 './srs_dev/場所です。frm'(errno:150)
"OK"って、何かが間違っているかを表に示す。その定義は、出力ファイルです。
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) ;
うokです。いると推測かが間違っているクエリーのブラウザだったこのサーバ上のファイルとして荷重をこのようになっております
] mysql -u admin -p -D dbname < path/to/create_file.sql
とでも同様のエラーになります。いかにこの問題は、すべての種類のことを話にエラーとザスタイルファイルの場合に外部キーの修正が追加"設定FOREIGN_KEY_CHECKS=0;"のSQLスクリプトは、ご覧のとおり、既に一部のファイルのファイルはMySQLワークベンチにつばを吐ます。
なので、私の質問は、なぜなんだって思うんですけどになっているのですか?
版情報:
MySQL:5.0.45
- GUIツール:1.2.17
- ワークベンチ:5.0.30
解決
外部キー内のフィールドの種類は、彼らが参照している列の型と同じでなければなりません。あなたは、次の(つむ)を持ってます:
CREATE TABLE IF NOT EXISTS `state` (
`state_id` INT NOT NULL AUTO_INCREMENT ,
...
CREATE TABLE IF NOT EXISTS `brand` (
`brand_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
...
CREATE TABLE IF NOT EXISTS `location` (
...
`state_id` TINYINT UNSIGNED NULL DEFAULT NULL ,
...
`brand_id` TINYINT UNSIGNED NOT NULL ,
あなたは(表はINT
とstate
で)テーブルbrand
でTINYINT
フィールドとフィールドをlocation
を参照しようとしているので。私はそれが不満だエラーだと思います。それが最初の場所に来たかわからない、またはエラーを診断からMySQLを停止しませんFOREIGN_KEY_CHECKS
をゼロ、しかし、あなたがこのタイプの不一致を修正した場合に何が起こるのはなぜ?
他のヒント
このスレッドを見て他の人のために、あなたはこのエラーを取得することができます多くの理由があります:
エラー番号150、エラー番号121および他のMySQL外部キーエラーの完全なリストについては、以下のリンクを参照してください。
は、ちょうど@juacalaの答えをチェックしました。しかし、私を助けていませんでした。ここで私は、トラブルの私のソースを見つけたとき、私は@ELIACOMに送信されたメッセージがあります:ます。
私は、ソリューションのこの偉大なソースを読んでいたが、私の問題ではありません adressed。私はAを指すのInnoDBテーブルでFKを追加しようとしていました MyISAMテーブルでPK。 INNODBにMyISAMテーブルを設定した後、それが働きました。私 それを実現する前に、あなたの全体のリストをチェックしました。乾杯ます。
私は同じ問題がありました。どういうわけか私はテーブルIDにAUTO_INCREMENT値を設定するために気付きませんでした。 多分それは誰かを助けます。