3

次のように、外部キー参照を使用して mysql にテーブルを作成しようとしています。

データベース A:

CREATE TABLE replication (
  id varchar(255) NOT NULL PRIMARY KEY,
  uid varchar(255) NOT NULL,
  value int(11) NOT NULL,
  FOREIGN KEY (uid) REFERENCES databaseB.users(username)
);

データベース B には、次のような users という名前のテーブルがあります。

+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| id              | varchar(255) | NO   |     | NULL    |       |
| username        | varchar(255) | NO   | PRI | NULL    |       |
+-----------------+--------------+------+-----+---------+-------+

テーブル レプリケーションを作成しようとすると、次のエラーが表示されます。

ERROR 1005 (HY000): Can't create table 'databaseA.replication' (errno: 150)

何か案が?前もって感謝します!

4

4 に答える 4

4

uid にインデックスを追加する必要があります。そうしないと、何かを参照するように設定できなくなります。

また、通常、DatabaseB では、users テーブルに ID の主キーとユーザー名の一意のインデックスを設定します。次に、DatabaseA.replication REFERENCES databaseB.users(id) から外部キーを設定します。

于 2013-05-17T12:56:44.617 に答える
1

両方のデータベースが同じタイプ (MyISAM、INNODB) ですか? 外部キーを MyISAM DB に向けることはできません。このエラーは、フィールド タイプ (この場合は varchar(255) と同じ) のタイプが混在している場合、またはフィールドのエンコーディングが異なる場合にも発生する可能性があります。別の理由として、他のデータベースにアクセスできないことが考えられます。

于 2013-05-17T12:56:38.367 に答える