為什麼我不能成功地建立外部索引鍵?
更新於
可應用作業系統:Windows、macOS、Linux
可應用 Navicat 產品:Navicat for MySQL、Navicat for PostgreSQL、Navicat for SQLite、Navicat for Oracle、Navicat for MariaDB、Navicat Premium
可應用 Navicat 版本編號:全部
MySQL & MariaDB
如果你收到 MySQL 錯誤如 1005: Can't create table '.\mydb\#sql-44c_1c.frm'(errno: 150),它是由於建立外部索引鍵失敗。有些可能的情況導致在 MySQL 資料庫建立外部索引鍵失敗。這些錯誤都關係到 MySQL 本身。
例子情況:
- 如果兩個欄位(欄位名稱和外部索引鍵名稱)使用不相容的欄位類型。
- 如果你使用 "On Delete Set Null",但欄位不允許 null。
要在 MySQL 聲明外部索引鍵,使用者應該緊記幾個要點:
- 兩個資料表必須是 InnoDB 類型。
- 在參考的表,必須有一個索引,參考的列被列為第一欄的排序相同。
- 不支援索引前綴在外部索引鍵欄。
- InnoDB 需要索引在外部索引鍵和參考鍵,以便外部索引鍵檢查可以快速,不需要資料表掃描。
- 兩個鍵欄位必須有相容的欄位類型。
- 整數類型的大小和符號必須是相同。
- 字串類型的長度不一定是相同。
- 外部索引鍵的名稱在資料庫中必須是唯一的。
- 如果你指定一個 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 聲明外部索引鍵,使用者應該緊記幾個要點:
- FOREIGN KEY 限制必須參考 PRIMARY KEY 或 UNIQUE 限制。
- 兩個鍵欄位必須有相容的資料類型。
- 必須在參考和被參考的資料表有 REFERENCES 權限。
Oracle
要在 Oracle 聲明外部索引鍵,使用者應該緊記幾個要點:
- FOREIGN KEY 限制必須參考 PRIMARY KEY 或 UNIQUE 限制。
- 兩個鍵欄位必須有相容的資料類型。
- 複合外部索引鍵被限制為 32 欄。
- 必須有權限存取上層和子資料表。
欲了解更多外部索引鍵限制的詳細資訊,請訪問 - http://download.oracle.com/docs/cd/B14117_01/appdev.101/b10795/adfns_co.htm#1006976
SQLite
要在 SQLite 聲明外部索引鍵,使用者應該緊記幾個要點:
- 上層和子鍵必須有相同的基數。
欲了解更多外部索引鍵限制的詳細資訊,請訪問 - http://www.sqlite.org/foreignkeys.html
-
合作夥伴