為什麼我不能成功地建立外部索引鍵?

可應用作業系統:Windows、Mac、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 本身。

例子情況:

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

 

Oracle

要在 Oracle 聲明外部索引鍵,使用者應該緊記幾個要點:

  1. FOREIGN KEY 限制必須參考 PRIMARY KEY 或 UNIQUE 限制。
  2. 兩個鍵欄位必須有相容的資料類型。
  3. 複合外部索引鍵被限制為 32 欄。
  4. 必須有權限存取上層和子資料表。

欲了解更多外部索引鍵限制的詳細資訊,請訪問 - http://download.oracle.com/docs/cd/B14117_01/appdev.101/b10795/adfns_co.htm#1006976

 

SQLite

要在 SQLite 聲明外部索引鍵,使用者應該緊記幾個要點:

  1. 上層和子鍵必須有相同的基數。

欲了解更多外部索引鍵限制的詳細資訊,請訪問 - http://www.sqlite.org/foreignkeys.html

還有其他問題嗎? 提交查詢.
還有其他問題?提交請求

0 評論

文章評論已關閉。