📌  相关文章
📜  SQLSTATE[HY000]: General error: 1005 Can't create table `.`labels` (errno: 150 "Foreign key constraint is wrongly form") (SQL: alter table `labels` add constraint - PHP Code Example(1)

📅  最后修改于: 2023-12-03 15:05:20.510000             🧑  作者: Mango

介绍

当在MySQL中创建外键时,有时会出现错误。其中一个常见错误是General error: 1005 Can't create table errno:150 "Foreign key constraint is wrongly form"。本文将介绍该错误的原因和解决方案。

原因

此错误的原因可能是以下之一:

  1. 父表和子表使用的字符集不同

  2. 父表和子表的数据类型不同

  3. 父表中的字段不存在,或者它是无符号的

  4. 外键约束名称与数据库中的其他外键约束名称冲突

解决方案

以下是解决此错误的一些方法:

字符集

确保父表和子表使用相同的字符集。在创建表时,应使用相同的字符集。

数据类型

确保父表和子表使用相同的数据类型。数据类型应该匹配。例如,如果父表的主键是BIGINT(20),那么子表的外键应该是BIGINT(20)。

字段

确保在子表中设置外键时,列在父表中存在并且具有相同的数据类型和长度。父表中的列也需要是一个索引。

约束名称

确保外键约束名称与数据库中的其他外键约束名称不冲突。

如果出现此错误,请尝试按照上述解决方案之一进行更改。如果错误仍然存在,请检查表结构以查找其他可能的问题。

以下是PHP代码片段,用于添加外键约束:

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password');
    $sql = "ALTER TABLE `labels` ADD CONSTRAINT `labels_users_foreign`
    FOREIGN KEY (`user_id`) REFERENCES `users` (`id`);";
    $pdo->exec($sql);
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

以上是添加外键约束的基本代码。如果出现错误,将抛出PDOException异常,并显示出错消息。