经验:如何使用replace而不丢失数据
2024-10-19 17:36:41
背景:replace很好用,的应用场景比较多,但是直接使用可能会造成一引起字段的值丢失.
解决方法:
一.原始数据
select id,f1,f2 ,flag from update_test;
id f1 f2 flag
1 1 a 1
2 2 b 1
二.更新一条记录(注意字段flag的值会丢失)
replace into update_test(id,f1,f2)
select 1 id,'100' f1,'aa' f2
;
id f1 f2 flag
1 100 aa (null)
2 2 b 1
注意:replace是先删除,后插入;如果插入的数据是部分字段(如读取订单.csv),那么其实就造成了数据丢失.
三.避免方法,通过关联语句先查询出整行数据:
replace into update_test(id,f1,f2,flag)
select a.id,a.f1,a.f2,b.flag
from (select 2 id,'200' f1,'bb' f2 ) a join (select id,flag from update_test) b on a.id=b.id
;
影响行数:2
查询数据:
select id,f1,f2 ,flag from update_test;
id f1 f2 flag
1 100 aa (丢失)
2 200 bb 1 (保存了原来的数据)
#
最新文章
- 3.1 AngularJS必备知识
- Atitit.会员卡(包括银行卡)api的设计
- apache2 tomcat https配置-被忽悠进了CentOS 6
- SQL Server 存储过程自定义生成ID号
- js Array 交集 并集 差集 去重
- android-详解Android 6.0运行时权限
- Linux C 文件与目录4 将缓冲区数据写入磁盘
- echo输出空行
- bzoj1058: [ZJOI2007]报表统计
- Android开发UI之个性化控件之Menu
- 【转】 iOS 两种方法实现左右滑动出现侧边菜单栏 slide view
- hdu1507--二分图最大匹配
- java.lang.NullPointerException错误分析
- 汉诺塔python3函数编写和过程分析
- 手机PC监听用户复制内容
- linux中安装程序及账户管理
- BZOJ4269再见Xor——高斯消元解线性基
- 修改Tomcat默认连接数
- jmeter的使用
- HDU 6156 数位dp