平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“mysql批量更新语句简单代码示例”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
1. 一条SQL语句实现批量更新数据,update结合case、when和then的采用。最优选
UPDATE mytable SET
myfield = CASE id
WHEN 1 THEN ‘3’
WHEN 2 THEN ‘4’
WHEN 3 THEN ‘5’
END
WHERE id IN (1,2,3);
详解:这句sql的意思是,更新myfield 字段,如果id=1 则myfield 的值为3,如果id=2 则 myfield 的值为4,如果id=3 则 myfield 的值为5。
2. 直接update执行强制更新。性能问题
UPDATE \`asset\` SET \`state\` = '2' WHERE (system\_id in ( '111111111111111','12222222222','333333333','4444444444'))
3. replace into。
操作本质是对重复的记录先delete 后insert。如果更新的字段不全会将缺失的字段置为缺省值,插入之后,数据的自增主键id会改变,执行一次,实际影响行数1行,慎用!!!
结合项目来看,**如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,随后插入新的数据。 否则,直接插入新数据。**理解这一步时,插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。
用法一:插入语句
replace INTO \`user\` ( \`user\`, \`pwd\`, \`age\`) VALUES ( 'test1', '111', 11);
用法二:用来复制数据
replace INTO \`user\` ( \`user\`, \`pwd\`, \`age\`) select user,pwd,age from test
用法三:用来更新数据,会根据唯一索引来更新
replace INTO \`lvxx\`.\`user\` set user = 'test1' ,age = 11,pwd = '33333';
4. Assign FirstorCreate 语句
Attrs: 如果没有找到记录,则采用Attrs中的数据来初始化一条记录:
在这个场景下,//采用attrs来初始化参数,如果未找到数据则采用attrs中的数据来初始化一条
//注意:attrs 必须 要和FirstOrInit 或者 FirstOrCreate 连用
db.Where(User{Name:“xiaoming”}).Attrs(User{Name:“xiaoming”,Age:12}).FirstOrInit(&u)
总结
落到代码里,总的来说,mysql批量新增语句适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。

