0

このエラーについて同様の質問がたくさんあることは知っています (テーブルの作成または更新時に FOREIGN KEY が失敗します)。私はすでにチェックしました:

  • 両方のテーブルはすべて InnoDb です
  • すべてのフィールドはインデックス付き (または PK など、インデックス付き)、int、長さ 10 です。

しかし、それでもうまくいきません...今、誰かが私のSQLコードを見て、何かが間違っているかどうか教えてくれることを願っています:(

-- ----------------------------
-- Table structure for `hotels`
-- ----------------------------
DROP TABLE IF EXISTS `hotels`;
CREATE TABLE `hotels` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  -- other fields
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;


-- ----------------------------
-- Table structure for `hotelsearch_query`
-- ----------------------------
DROP TABLE IF EXISTS `hotelsearch_query`;
CREATE TABLE `hotelsearch_query` (
  `id` int(10) NOT NULL,
  -- other fields
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- ----------------------------
-- Table structure for `hotelsearch_result`
-- ----------------------------
DROP TABLE IF EXISTS `hotelsearch_result`;
CREATE TABLE `hotelsearch_result` (
  `query_id` int(10) unsigned NOT NULL,
  `hotel_id` int(10) unsigned NOT NULL,
  -- other fields
  PRIMARY KEY (`query_id`,`hotel_id`),
  KEY `IDX_QUERY` (`query_id`),
  KEY `IDX_HOTEL` (`hotel_id`),
  FOREIGN KEY (`query_id`) REFERENCES `hotelsearch_query`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY (`hotel_id`) REFERENCES `hotels`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

外部キーに関する 2 行を削除すると、すべてが正常に機能します。両方、または1つずつ試すと、エラーも発生します。

私を助けてください !

4

1 に答える 1

4

列と参照のデータ型は同じである必要があります。このように定義を変更すると、機能します。

CREATE TABLE `hotelsearch_result` (
  `query_id` int(10)  NOT NULL,
  `hotel_id` int(10)  NOT NULL,
  ...

タイプのIDとタイプint unsignedの参照int

SQLFiddleの例

于 2012-10-05T18:23:35.257 に答える