UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

例:想将
serviceId=36的number变为20
serviceId=37的number变为30
serviceId=38的number变为40
该怎么做?
在这里插入图片描述

切记不要循环sql语句,拼一条sql语句就解决。
有两种方法:

方法一:(当表里没有主键或者唯一索引的情况)

数据循环遍历按照下方格式when…then…(WHEN 36 THEN 10)拼成字符串,然后拼成一条sql

  • 修改单字段
UPDATE cd_demo 
SET number = CASE serviceId 
		WHEN 36 THEN 10 
		WHEN 37 THEN 20 
		WHEN 38 THEN 30 
	END 
	WHERE serviceId IN ( 36, 37, 38 ) AND user_pkgId = 160
  • 修改多字段
UPDATE cd_demo 
SET number = CASE serviceId 
		WHEN 36 THEN 10 
		WHEN 37 THEN 20 
		WHEN 38 THEN 30 
	END,
	number1 = CASE serviceId 
		WHEN 36 THEN 100 
		WHEN 37 THEN 200
		WHEN 38 THEN 300 
	END 
	WHERE serviceId IN ( 36, 37, 38 ) AND user_pkgId = 160
方法二:(当表里存在主键或者唯一索引的情况,INSERT … ON DUPLICATE KEY UPDATE语句)

在这里插入图片描述

原理:
前提是当表里存在主键或唯一索引时使用
当id存在时,修改number和number1
当id不存在时,插入一条数据
数据循环遍历拼成字符串"(1,20,200,160),(4,30,300,160),(5,40,400,160)",然后拼成一条sql
ON DUPLICATE KEY UPDATE 后面是要修改的字段

INSERT INTO cd_demo (id, number, number1,user_pkgId) VALUES
(1,20,200,160),
(4,30,300,160),
(5,40,400,160)
ON DUPLICATE KEY UPDATE number=VALUES(number), number1=VALUES(number1)

注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐