繁体   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