公司法
当前位置: 首页 法律大全

sql语言中的insert(如何优雅地结合insert和update)

时间:2023-05-26 作者: 小编 阅读量: 1 栏目名: 法律大全

sql语言中的insert背景我们在业务开发中经常遇到这样的情况,当数据库已经存在同一主键的数据,则执行update操作,如果不存在,则执行insert操作。用update和insert语句可以满足要求,但是需要先查询数据库中有没有该记录,根据查询结果再判断是执行update还是insert。对于单条语句来说很适合,但是对于多条批量大数据操作时比较浪费性能。

sql语言中的insert?我们在业务开发中经常遇到这样的情况,当数据库已经存在同一主键的数据,则执行update操作,如果不存在,则执行insert操作用update和insert语句可以满足要求,但是需要先查询数据库中有没有该记录,根据查询结果再判断是执行update还是insert对于单条语句来说很适合,但是对于多条批量大数据操作时比较浪费性能,今天小编就来聊一聊关于sql语言中的insert?接下来我们就一起去研究一下吧!

sql语言中的insert

背景

我们在业务开发中经常遇到这样的情况,当数据库已经存在同一主键的数据,则执行update操作,如果不存在,则执行insert操作。用update和insert语句可以满足要求,但是需要先查询数据库中有没有该记录,根据查询结果再判断是执行update还是insert。对于单条语句来说很适合,但是对于多条批量大数据操作时比较浪费性能。

解决方法

第1种解决方式:replace into

replace into 首先尝试插入数据到表中,

1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。

2. 否则,直接插入新数据。

REPLACE INTO `table_name`(`col_name`, ...) VALUES (...);REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;REPLACE INTO `table_name` SET `col_name`='value';

第2种解决方式:INSERT ... ON DUPLICATE KEY UPDATE

首先,此语法的前提是表中一定要有个唯一的索引或者主键

具体使用如下:

单条操作

INSERT INTO table (a,b,c) VALUES (1,2,3)ON DUPLICATE KEY UPDATE c=c 1;

这里假设a是主键,当数据库中存在a=1的记录时,将c的值设置为c 1

多条操作

用VALUES关键字

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)ON DUPLICATE KEY UPDATE b=VALUES(b);

这里假设a是主键,当数据库中存在a=1的记录时,将b的值设置为2,否则插入新数据a=1,b=2,c=3; 当数据库中存在a=4的记录时,将b的值设置为5,否则插入新数据a=4,b=5,c=6

性能对比

在数据库数据量很少的时候,这两种方式都很快,无论是直接的插入还是有冲突时的更新,都不错,但在数据库表的内容数量比较大(如百万级)的时候,两种方式就不太一样了,

首先是直接的插入操作,两种的插入效率都略低,比如直接向表里插入1000条数据(百万级的表(innodb引擎)),二者都差不多需要5,6甚至十几秒。究其原因,主要是在向大数据表批量插入数据的时候,每次的插入都要维护索引的,索引固然可以提高查询的效率,但在更新表尤其是大表的时候,索引就成了一个不得不考虑的问题了。

其次是更新表,这里的更新的时候是带主键值的(因为我是从另一个表获取数据再插入,要求主键不能变)同样直接更新1000条数据,replace的操作要比insert on duplicate的操作低太多太多,当insert瞬间完成(感觉)的时候,replace要7、8s, replace慢的原因是更新数据的时候,要先删除旧的,然后插入新的,在这个过程中,还要重新维护索引,insert on duplicate 的更新操作虽然也会更新数据,但其对主键的索引却不会有改变,也就是说,insert on duplicate 更新对主键索引没有影响.因此对索引的维护成本就低了一些(如果更新的字段不包括主键,那就要另说了)。

    推荐阅读
  • 鸡蛋酱做法(鸡蛋酱做法步骤)

    准备用料鸡蛋、杭椒、大酱、清水、海鲜酱油、蚝油、淀粉、鸡精,今天小编就来聊一聊关于鸡蛋酱做法?鸡蛋酱做法准备用料。取出大酱倒入干净的碗中,备用。在装有大酱的碗中倒入适量的水,未淹没但是快要淹没大酱的高度即可,用筷子不停搅拌直到没有颗粒即可,备用。加入切好的杭椒小圈圈,不停翻炒至杭椒蔫儿了即可。锅中放入稀释好的大酱,然后依次放入海鲜酱油、耗油、味精,搅拌均匀。

  • 微信对话框怎么换气泡(教你怎么更换微信对话框的气泡)

    以下内容希望对你有帮助!微信对话框怎么换气泡首先打开手机微信,进入聊天窗口,点击右下角的笑脸符号。进入表情商店,点击上面的搜索,输入聊天泡泡,搜索后点击结果。进入表情详情,点击添加按钮。然后回到聊天界面,就可以跟朋友发送消息了,这样就更改了聊天气泡框了。

  • 新买的木筷子要不要煮(新买的木筷子如何消毒)

    应该是放在温水中泡,并且在温水中加入一定量的盐。在筷子绝对干燥情况下刷食用油。刷食用油的时候每个地方都刷到,食用油使用葵花油或者橄榄油最好,反正也不会用太多的油,刷完之后就要把筷子晾到一边了,不用刻意暴晒,就让它自然风干就行,最少十二个小时,这样筷子才能把油都喝了。

  • 女性月经量少该怎么调养(女性月经量少就这样调理)

    所以因为有了原因,我们就可以针对以上的病因来调理。内分泌失调的话,你就调整它的卵巢功能,改善卵巢功能。从中医讲,主要是要补气血。如果血瘀的要活血化瘀,有痰湿的要化痰除湿。在生活中,我们可以比如月经前,少、颜色黑,也可以吃,可能喝一点红糖煮鸡蛋这样子,或者吃点益母草膏,活血的,这是最基本的、最简单的。如果说很严重的,可能你平时还是要来医院看看,补一下气血,对症处理要好一点。

  • 几度梦回大唐歌词(歌曲几度梦回大唐歌词)

    歌词几度梦回大唐,下面我们就来说一说关于几度梦回大唐歌词?我们一起去了解并探讨一下这个问题吧!收纳于专辑《一人饮酒醉》中。原唱为王道扬2015年在酷我音乐、酷狗音乐发行《几度梦回大唐》。

  • 滑雪时滑雪杖应在什么位置(滑雪杖的使用方法)

    滑雪时滑雪杖应在什么位置滑雪杖的总高度应在使用者的9部以_肩部以下。滑雪杖的杆体应选用坚实的木质杆或合金铝管,选用空心竹杆为佳,杆的直径为I5---30毫米,上下等粗或上端略粗。滑雪杖是由杆体、握革、雪轮、雪杖尖整部分组成的。握革带最好不要过细,要使长短可调,这样,手大手小和戴不同的手套均能使用。雪杖长度调整到110cm,最适合在各种不同地形使用。

  • 廊坊临时货车通行证办理时间 廊坊货车通行证在哪里办理

    廊坊临时货车通行证办理时间:仅在8:00-17:00受理临时通行证申请与查询(微信)入口通过关注“廊坊交警”微信公众号,进行市区大货车临时通行证申请和查询操作,可在“廊坊交警”微信公众号右下角“通行证”菜单进行操作。点击此处进入申请入口点击【通行证】弹出子菜单【临时通行证申请】、【临时通行证查询】,点击【临时通行证申请】打开对应访问链接页面,进行大货车通行证申请,点击【临时通行证查询】打开对应访问

  • 相机测光是什么意思 摄影的测光是什么

    就好比测量海拔一样。不过问题在于,并不是所有情况下测光表的读数都是准确的,所以拍出的照片有可能过亮或过暗。如果想得到更好的曝光效果,你可以通过曝光补偿来弥补测光上的错误,或者直接手动修改曝光参数——光圈、快门速度和ISO。

  • arm 中断类型(4.从0学ARM-ARM指令移位)

    数据传送指令用于在寄存器和存储器之间进行数据的双向传输。算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位。如果数据中间有连续的大于等于24个0,循环左移2的倍数,使高位全为0。我们需要从MOV这条指令的机器码来说起。花括号表示此项可缺省。当指令执行条件满足时,指令被执行,否则被忽略。指令条件码及其助记符后缀表示参见下表。