可应用操作系统:Windows、macOS、Linux

可应用 Navicat 产品:Navicat for MySQL、Navicat for PostgreSQL、Navicat for SQLite、Navicat for Oracle、Navicat for MariaDB、Navicat Premium

 

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.

 

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 权限。

 

Oracle

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

  1. FOREIGN KEY 限制必须参考 PRIMARY KEY 或 UNIQUE 限制。
  2. 两个键字段必须有相容的数据类型。
  3. 复合外键被限制为 32 列。
  4. 必须有权限访问上级和子表。

 

SQLite

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

  1. 上级和子键必须有相同的基数。

还有其他问题吗?请提交查询。
提交查询