MySQL中如何为courses表的diff列添加不同取值并生成目标数据?
解决MySQL courses表diff列赋值问题
问题根源分析
你之前的操作错误在于:
INSERT courses (diff) VALUES ('ez');是新增一条全新记录,而非修改已有行,所以会生成一条id自增、但faculty和number为NULL的无效行,这就是你遇到的异常行问题。UPDATE courses SET faculty = 'chem', number = 2, diff = 'mid';没有添加WHERE条件,会把表中所有行的faculty和number强制改成chem和2,完全不符合需求。
正确操作步骤
你的目标是给已有行的diff列分别赋值,同时确保数据和目标表一致,分两种情况处理:
情况1:表中已存在所有目标行(仅diff列空)
针对每一行的唯一标识(优先用主键id,也可用faculty+number组合),执行带WHERE条件的UPDATE语句:
-- 对应id=1的bio 1行 UPDATE courses SET diff = 'ez' WHERE id = 1; -- 对应id=2的chem 2行 UPDATE courses SET diff = 'mid' WHERE id = 2; -- 对应id=3的math 3行 UPDATE courses SET diff = 'hard' WHERE id = 3; -- 对应id=4的geo 4行 UPDATE courses SET diff = 'mid' WHERE id = 4; -- 对应id=5的gum 5行 UPDATE courses SET diff = 'ez' WHERE id = 5;
如果不知道各行的id,也可以用faculty和number作为条件:
UPDATE courses SET diff = 'ez' WHERE faculty = 'bio' AND number = 1; UPDATE courses SET diff = 'mid' WHERE faculty = 'chem' AND number = 2; -- 其余行同理
情况2:表中缺少部分目标行
如果你的表还没有目标表中的某些行(比如math 3、geo 4这些),需要先插入这些缺失的记录,再设置diff:
-- 插入缺失的行,id会自动自增 INSERT INTO courses (faculty, number, diff) VALUES ('math', 3, 'hard'), ('geo', 4, 'mid'), ('gum', 5, 'ez'); -- 已有行的diff用上面的UPDATE语句补充
关键注意事项
- 执行
UPDATE必须加WHERE条件,否则会修改全表所有数据,造成数据丢失。 - 操作前可以先执行
SELECT * FROM courses;查看当前表数据,确认需要修改或插入的行。
内容的提问来源于stack exchange,提问作者FRANKY
相关产品推荐
相关产品推荐

