微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建新表时不能添加外键约束

如何解决创建新表时不能添加外键约束

我正在创建一个非常新的数据库,当我尝试向表中添加一些外键时出现此错误 : 致命错误:未捕获的 PDOException:sqlSTATE[HY000]:一般错误:1215 无法添加外键约束

这是我的代码

$pdo->exec("CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,username VARCHAR(255) NOT NULL,password CHAR(255) NOT NULL,slug VARCHAR(255) NOT NULL,ft_img VARCHAR(255) NOT NULL,content text NOT NULL,email VARCHAR(255) NOT NULL,phone VARCHAR(255) NOT NULL,role ENUM ('Author','Admin','Suscriber') NULL DEFAULT 'Suscriber',created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

//Create posts table
$pdo->exec("CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,user_id int NULL,title VARCHAR(255) NOT NULL,chapo VARCHAR(255) NOT NULL,created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,published tinyint NOT NULL,FOREIGN KEY (user_id) REFERENCES USERS (id) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

//Create comments table
$pdo->exec("CREATE TABLE comments (
    id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,pseudo VARCHAR(255) NOT NULL,published tinyint NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");


// Create posts_comments table
$pdo->exec("CREATE TABLE posts_comments (
    post_id INT UNSIGNED NOT NULL,comment_id INT UNSIGNED NOT NULL,PRIMARY KEY (post_id,comment_id),CONSTRAINT fk_post
        FOREIGN KEY (post_id)
        REFERENCES posts (id)
        ON UPDATE CASCADE
        ON DELETE RESTRICT,CONSTRAINT fk_comment
        FOREIGN KEY (comment_id)
        REFERENCES comments (id)
        ON UPDATE CASCADE
        ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");

错误消息:致命错误:未捕获的 PDOException:sqlSTATE[HY000]:一般错误:1215 无法添加外键约束

如果有人可以帮忙,我就是不明白为什么我会收到这个错误

提前致谢,

解决方法

post_id INT UNSIGNED NOT NULL,comment_id INT UNSIGNED NOT NULL,

这些是 INT UNSIGNED,但它们引用的主键是 INT

数据类型必须相同。签名与未签名足以使它们在外键引用方面不兼容。

您可能会喜欢我贡献的这个答案,它是外键可能出错的清单:https://stackoverflow.com/a/4673775/20860

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。