簡體   English   中英

PHP MySQL錯誤創建表:無法添加外鍵約束

[英]PHP MySQL Error creating table: Cannot add foreign key constraint

我正在嘗試編寫一個PHP腳本在同一數據庫中創建2個表,這些表應通過1(表類別)鏈接到許多(表頁面)關系。 因此,“類別”表中的主鍵“ category_id”應為表“頁面”中的外鍵。

表“類別”創建成功,沒有問題:

$sql="CREATE TABLE category(
    category_id SMALLINT NOT NULL AUTO_INCREMENT,
    category VARCHAR(30) NOT NULL,
    PRIMARY KEY (category_id),
    UNIQUE (category)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8";

然后,我嘗試創建第二個表“頁面”:

$sql="CREATE TABLE page(
    page_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
    category_id SMALLINT UNSIGNED NOT NULL,
    title VARCHAR(100) NOT NULL,
    description TINYTEXT NOT NULL,
    content LONGTEXT NOT NULL,
    date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (page_id),
    FOREIGN KEY (category_id) REFERENCES category (category_id)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8";

我得到以下錯誤:

Error creating table: Cannot add foreign key constraint

您能告訴我我的代碼有什么問題嗎? 非常感謝。

根據http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html上的MySql手冊:

Corresponding columns in the foreign key and the referenced key must have similar data types. 
The size and sign of integer types must be the same.

問題在於您將外鍵指定為UNSIGNED ,而主鍵則未指定。 確保您的外鍵符合其父代的規范。

從MySQL 使用FOREIGN KEY約束文檔:

外鍵和引用鍵中的對應列必須具有相似的數據類型。 整數類型的大小和符號必須相同。

page表中, category_idSMALLINT UNSIGNED ,但在category只是SMALLINT 它們必須完全相同。

用於外鍵的列必須具有匹配的規范。 在這里,您有一個category_id列已簽名,而另一個未簽名。 換一個。

您的問題是category_id中的UNSIGNED。 嘗試將其刪除

嘗試

$sql="CREATE TABLE page(
    page_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
    category_id SMALLINT  NOT NULL,
    title VARCHAR(100) NOT NULL,
    description TINYTEXT NOT NULL,
    content LONGTEXT NOT NULL,
    date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (page_id),
    FOREIGN KEY (page.category_id) REFERENCES category (category.category_id)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM