如何在MySQL中更新除单个值外的所有条目中的特定列?
在数据库操作中,经常会遇到需要对所有条目中的某个列进行更新,但又不想把其中某个特定值更新掉。下面我们将介绍如何在MySQL中实现这一操作。
首先,我们来创建一个示例表格,包含id、name和age三列:
CREATE TABLE example (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
age INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);
接下来,我们往表格中插入一些数据:
INSERT INTO example (name, age) VALUES
('Alice', 20),
('Bob', 25),
('Charlie', 30),
('David', 35),
('Emma', 40);
现在,如果我们想把所有年龄 age 值加1,但想保持 Emma 的年龄不变,可以使用以下更新语句:
UPDATE example SET age = CASE
WHEN name <> 'Emma' THEN age + 1
ELSE age
END;
上述代码使用了MySQL中的CASE语句,将满足条件的行的age值更新加1,同时保持Emma的年龄不变。注意,条件部分(即CASE后的WHEN子句)是“当name不等于‘Emma’时”,如果需要保留多个特定的值不被更新,可以在条件部分加入多个WHEN语句。
不过,如果我们需要更新的列比较多,那么CASE语句代码可能就会变得比较冗长。这时,可以使用MySQL中的UNION语句将多个UPDATE语句合并为一个语句:
UPDATE example SET age = age + 1
WHERE name <> 'Emma'
UNION
SELECT * FROM example WHERE name = 'Emma';
上述代码中,第一条语句为更新除了Emma以外的行的age值加1,第二条语句使用了UNION语句,将查询到的结果插入到结果集中,即保持Emmma的年龄不变。
阅读更多:MySQL 教程
结论
MySQL中更新所有条目中的特定列,可以使用CASE语句或UNION语句,分别根据具体情况选择使用。