支持事务,行级锁定和外键

mis*_*tin 4 mysql

由于某种原因,我无法创建此表:

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)
);
Run Code Online (Sandbox Code Playgroud)

以下类似的表没有问题:

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)
);
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是:

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

有任何想法吗?

Syl*_*oux 7

http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

如果重新创建已删除的表,则它必须具有符合引用它的外键约束的定义.它必须具有正确的列名和类型,并且必须在引用的键上具有索引,如前所述.如果不满足这些,MySQL将返回错误1005并在错误消息中引用错误150,这意味着未正确形成外键约束.

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

  • ...为了在列上有外键,您必须在"目标"列上有一个索引.
  • ...为了在列上具有外键,"源"和"目标"列必须具有相同的类型(如果适用,则包括相同的大小).
  • ...为了在列上有外键,两个表都必须使用InnoDB引擎.