首次创建数据库遇user_id不存在错误,该如何修复?
修复"user_id does not exist in table"错误的方案
你的代码里有几个明确的错误,直接导致了这个报错:
字段名不匹配
你在表中定义的关联字段是users_id,但主键和外键约束里都写了user_id——数据库找不到user_id这个字段,这是报错的核心原因。主键设置错误
评论表的主键应该是自身的id自增字段,而非关联用户的字段,这是基础的表设计问题。默认值类型不兼容
DATETIME类型的默认值需用CURRENT_TIMESTAMP,CURRENT_TIME仅表示时分秒,和DATETIME的日期+时间类型不匹配。NOT NULL与ON DELETE SET NULL冲突
users_id被标记为NOT NULL,但外键的ON DELETE SET NULL会在关联用户删除时将该字段设为NULL,两者逻辑矛盾,必须调整其一。
修正后的代码(适配允许空关联的场景)
CREATE TABLE comments ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(30), comment_text TEXT NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, users_id INT(11), -- 移除NOT NULL,适配ON DELETE SET NULL PRIMARY KEY (id), FOREIGN KEY (users_id) REFERENCES users (id) ON DELETE SET NULL );
若要求users_id必须非空的场景
可以修改外键删除规则,比如改为ON DELETE CASCADE(删除用户时同步删除其所有评论),同时保留users_id的非空约束:
CREATE TABLE comments ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(30), comment_text TEXT NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, users_id INT(11) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (users_id) REFERENCES users (id) ON DELETE CASCADE );
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

