2

データベースに次の 2 つのテーブルがあります。

CREATE TABLE `address` (
  `id` bigint(20) NOT NULL auto_increment,
  `entity_creation_timestamp` datetime default NULL,
  `entity_version` bigint(20) default NULL,
  `city` varchar(255) default NULL,
  `country` varchar(255) NOT NULL,
  `county` varchar(255) default NULL,
  `label` varchar(255) default NULL,
  `line1` varchar(255) default NULL,
  `line2` varchar(255) default NULL,
  `line3` varchar(255) default NULL,
  `state` varchar(255) NOT NULL,
  `zip` varchar(255) NOT NULL,
  `zip_extension` varchar(255) default NULL,
  `party_id` bigint(20) default NULL,
  `list_index` int(11) default NULL,
  `last_updated_timestamp` datetime default NULL,
  PRIMARY KEY  (`id`),
  KEY `fk_party_postaladdress_id` (`party_id`),
  CONSTRAINT `fk_party_postaladdress_id` FOREIGN KEY (`party_id`) REFERENCES `sims_party` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

別のもの :

CREATE TABLE `state` (
  `state` varchar(255) NOT NULL,
  `name` varchar(255) default NULL,
  PRIMARY KEY  (`state`),
  KEY `pk_state` (`state`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

「アドレス」テーブルの「状態」列の外部キー制約を「状態」テーブルの「名前」列に適用しようとしています..

私が同じために使用しているコマンドは次のとおりです。

ALTER TABLE address
  ADD CONSTRAINT FK_address_state FOREIGN KEY (state)
    REFERENCES state(state) ON DELETE RESTRICT ON UPDATE RESTRICT;

しかし、このコマンドを実行するたびに、次のエラーが発生します。

ERROR 1005 (HY000): Can't create table 'db.#sql-75c_da' (errno: 150)

どこが間違っているのか...???

4

1 に答える 1

0

MySQL が CREATE TABLE ステートメントからエラー番号 1005 を報告し、エラー メッセージがエラー 150 を参照している場合、外部キー制約が正しく形成されていないため、テーブルの作成に失敗しました。同様に、ALTER TABLE が失敗し、エラー 150 を参照する場合は、変更されたテーブルの外部キー定義が正しく形成されていないことを意味します。サーバーで発生した最新の InnoDB 外部キー エラーの詳細な説明を表示するには、以下を発行します。SHOW ENGINE INNODB STATUS

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

于 2012-12-05T13:44:29.030 に答える