为什么我不能成功地创建外键?

可应用操作系统iOS

可应用 Navicat 产品Navicat for MySQL、Navicat for PostgreSQL

可应用 Navicat 版本编号:全部

 

MySQL & MariaDB

如果你收到 MySQL 错误如 1005: Can't create table '.\mydb\#sql-44c_1c.frm'(errno: 150),它是由于创建外键失败。有些可能的情况导致在 MySQL 数据库创建外键失败。这些错误都关系到MySQL 本身。

例子情况:

  1. 如果两个字段(字段名和外键名)使用不相容的字段类型。
  2. 如果你使用 "On Delete Set Null",但字段不允许 null。

要在 MySQL 声明外键,用户应该紧记几个要点:

  1. 两个表必须是 InnoDB 类型。
  2. 在参考的表,必须有一个索引,参考的列被行为第一列的排序相同。
  3. 不支持索引前缀在外键列。
  4. InnoDB 需要索引在外键和参考键,以便外键检查可以快速,不需要表扫描。
  5. 两个键字段必须有相容的字段类型。
  6. 整数类型的大小和符号必须是相同。
  7. 字符串类型的长度不一定是相同。
  8. 外键的名在数据库中必须是唯一的。
  9. 如果你指定一个 SET NULL 动作,确保你没有在子表中声明列为 NOT NULL.

欲了解更多外键限制的详细信息,请访问 - http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

 

PostgreSQL

如果你收到 PostgreSQL 错误如 ERROR: there is no unique constraint matching given keys for referenced table "xxxx",它是由于创建外键失败。

要在 PGSQL 声明外键,用户应该紧记几个要点:

  1. FOREIGN KEY 限制必须参考 PRIMARY KEY 或 UNIQUE 限制。
  2. 两个键字段必须有相容的数据类型。
  3. 必须在参考和被参考的表有 REFERENCES 权限。
还有其他问题吗?请提交查询。 提交查询.
还有其它问题?提交请求

0 评论

文章评论已关闭。