首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持事务、行级锁定和外键

问支持事务、行级锁定和外键
EN

Stack Overflow用户
提问于 2013-08-15 01:26:17
回答 1查看 13.3K关注 0票数 4

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

代码语言:javascript
复制
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)
);

下面类似的表格没有问题:

代码语言:javascript
复制
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

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-15 02:17:26

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

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

If很难猜测,因为您没有提供roles和permissions表的定义,而是解释一下文档...

  • ...in要在列上具有外键,必须在"target“列上具有索引。
  • ...in要在列上具有外键,”源“列和”目标“列必须具有相同的类型(包括相同大小如果要在列上使用外键,则两个表都必须使用InnoDB引擎。
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18238321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档