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,这意味着没有正确形成外键约束。

如果很难猜测,因为您没有提供rolesandpermissions表的定义,而是解释文档...

  • ...为了在列上有一个外键,你必须在“目标”列上有一个索引。
  • ...为了在列上有一个外键,“源”和“目标”列必须具有相同的类型(包括相同的大小,如果适用)。
  • ...为了在列上有外键,两个表都必须使用 InnoDB 引擎。
于 2013-08-14T18:17:26.420 回答