4

何らかの理由で、このテーブルを作成できません:

CREATE TABLE user_role (
  user_id VARCHAR(20) NOT NULL,
  role_id INTEGER UNSIGNED NOT NULL,

  FOREIGN KEY (user_id)
    REFERENCES users(user_id),
  FOREIGN KEY (role_id)
    REFERENCES roles(role_id)
);

次の同様の表には問題はありません。

CREATE TABLE role_perm (
  role_id INTEGER UNSIGNED NOT NULL,
  perm_id INTEGER UNSIGNED NOT NULL,

  FOREIGN KEY (role_id)
    REFERENCES roles(role_id),
  FOREIGN KEY (perm_id)
    REFERENCES permissions(perm_id)
);

私が得ているエラーメッセージは次のとおりです。

#1005 - Can't create table 'test.user_role' (errno: 150) (Details...) Supports transactions, row-level locking, and foreign keys

何か案は?

4

1 に答える 1

9

http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.htmlを参照してください。

削除されたテーブルを再作成する場合は、それを参照する外部キー制約に準拠する定義が必要です。前述のように、正しい列名と型が必要であり、参照されるキーにインデックスが必要です。これらが満たされていない場合、MySQL はエラー 1005 を返し、エラー メッセージでエラー 150 を参照します。これは、外部キー制約が正しく形成されなかったことを意味します。

とテーブルの定義を提供しなかったので推測するのがかなり難しいですが、ドキュメントを言い換えると...rolespermissions

  • ...列に外部キーを設定するには、「ターゲット」列にインデックスが必要です。
  • ...列に外部キーを設定するには、「ソース」列と「ターゲット」列の両方が同じタイプ (該当する場合は同じサイズを含む) である必要があります。
  • ...列に外部キーを設定するには、両方のテーブルでInnoDB エンジンを使用する必要があります。
于 2013-08-14T18:17:26.420 に答える