8

次のクエリは、「都市で外部キーを作成中にエラーが発生しました (データ型を確認してください)」というエラーで失敗します。

ALTER TABLE  `hotels` ADD FOREIGN KEY (  `city` )
REFERENCES  `mydatabase`.`cities` (`id`)
ON DELETE CASCADE ON UPDATE CASCADE ;

基本的に、city.id と hotels.city の間に一対多の関係を持ちたいと考えています。

両方のテーブルを次に示します。

CREATE TABLE IF NOT EXISTS `cities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS `hotels` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `city` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `city` (`city`)
) ENGINE=InnoDB;
4

7 に答える 7

20

データ型は一致する必要があります:

cities.id int(11)
hotels.city bigint(20)

次のいずれかになります。

cities.id bigint(20)
hotels.city bigint(20)

または:

cities.id int(11)
hotels.city int(11)

アプリケーションのニーズに応じて。

また、言及する価値があるのは、両方が署名されているか署名されていないかのどちらかである必要があるという事実です。

OPTIMIZE一致するようにデータ型を変更した後、テーブルが必要になる場合があります。

于 2012-08-12T22:26:44.957 に答える
13

私はphpMyAdminを使用していましたが、関係ビューを使用して異なるテーブルに複数のインデックスを作成しようとしました. ただし、データ型が一致しないという同じエラーが発生しました。しかし、実際の原因は、複数のリレーションに同じ外部キー名を付けていたことであり、名前が重複しているため、mysql がこのエラーをスローしていました。したがって、リレーションの名前を変更すると、正常に機能するはずです。

リレーションビューでの外部キーの追加

于 2016-02-06T05:53:00.630 に答える
5

私はこれが答えられたことを知っており、この質問が古いことを知っています。ただし、別の原因でこの同じエラーに遭遇しました。これがこのエラーの上位の結果であるため、この情報をここに記載して、将来の自分自身と後で発生する他の人の両方に使用すると考えました。自分。

私のコラムは bigint と unsigned の両方でした。ただし、最初に参照されるテーブルを作成した後、主キー列の名前を変更しました。それ以外は何も変わっていませんが、外部キー関係を作成できませんでした。参照されたテーブルを削除し、必要な列名を使用してそれらを再作成することになり、外部キー関係を作成できました。

于 2013-08-05T19:41:00.783 に答える
4

言及する価値がありますが、照合は両方のテーブルで同じでなければなりません

両方のテーブルの varchar(64) フィールドで同じ問題に直面しましたが、2 つのテーブル フィールド間で同じではない照合フィールドから問題が発生していることを特定するのに時間がかかりました。

于 2015-08-14T11:56:45.420 に答える