首页 > 数据治理 > 数据治理 > 多条SQL语句一次性插入的几种方法
相信不少朋友在写SQL的时候,都遇到过这样的场景: 手里有一堆数据,想一次性塞进数据库表里,但一条一条INSERT太慢了,怎么办? 如果你是像我这样喜欢“偷懒”的工程师,自然会琢磨:有没有什么办法,能一次性把多条数据整进去,既高效又优雅?
今天我们就来 抽丝剥茧,把这个问题掰开揉碎了讲清楚。我会用 工程视角,带你一步步搞懂几种常用的批量插入方法。准备好了吗?那就花5分钟跟着我的思路走一遍吧!

INSERT SELECT 语句向表中添加数据这个方法,你可以理解成 “搬家”——把一张旧表里的数据,搬到一张新表里。
关键点:新表(比如
test_2)必须提前“装修好”,也就是已经存在,而且它的列的数据类型、数量和顺序,必须和旧表(
test)
一一对应,就像搬家时每个箱子都要对上房间的编号一样。
举个例子:
INSERT INTO test_2(name) SELECT name FROM test;
这里就是把
test 表里的
name 列,全部搬到
test_2 表的
name 列里。简单吧?
SELECT INTO 语句将数据添加到新表中这个方法就有点 “凭空造表”的意思了。执行查询的时候,系统会自动创建一张新表,所以这张表 不能事先存在,否则会报错。
类比一下:你手里有一堆零件(数据),想组装成一个新柜子(新表),那这个柜子肯定不能提前摆在那里,对吧?
来看代码:
SELECT name, age, sex INTO student_2 FROM student;
这条语句会直接从
student 表里选出
name、
age、
sex 三列数据,然后
自动创建一张叫
student_2 的新表,并把数据塞进去。是不是很省事?
UNION 关键字合并数据进行插入这个方法适合
手动拼数据的场景。你可以把
UNION 想象成
“拼接积木”——把几段独立的“数据块”拼成一条完整的记录,然后一次性插入。
注意:拼接的时候,每一段数据的数量、顺序和类型必须保持一致,就像拼乐高,每一块的接口必须对得上。
看例子:
INSERT INTO test(column_name) SELECT 'aa' UNION SELECT 'bb' UNION SELECT 'cc';
这里就是先把
'aa'、
'bb'、
'cc' 三条数据通过
UNION 合并成一个结果集,然后一次性插入到
test 表的
column_name 列中。
小提问:如果我想插入多列数据,该怎么办?没错,把
SELECT 里的内容扩展成多列就行了,比如
SELECT 'aa', 1 UNION SELECT 'bb', 2。是不是很好理解?
有时候我们往新表里插数据,还希望自动生成一个
自增编号(比如ID),这时候就需要用到
IDENTITY 函数了。
你可以把它理解成 “自动发号机”——每插入一条数据,就自动生成一个递增的序号。
语法如下:
SELECT IDENTITY(int, 1, 1) INTO new_table FROM original_table;
这里的
int 是数据类型,
1, 1 表示从1开始,每次增加1。
来个完整的例子:
SELECT IDENTITY(int, 1, 1) AS id, name INTO test_2 FROM test;
这条语句会从
test 表里选出
name 列,同时自动生成一个从1开始的
id 列,然后一起存入新表
test_2 中。
一步到位,省心省力!
好了,以上就是几种常见的批量插入方法。是不是感觉思路清晰多了? 从“搬家”到“造表”,再到“拼积木”和“自动发号”,每一种方法都有自己的适用场景。
想用好SQL的朋友,都需要通盘搞清这些技巧,才能在实际开发中做到 手中有剑,心里不慌!
如果你觉得这种方式还不错,那就动手试试吧,把上面的例子跑一遍,相信我,你会有新的收获!
学SQL,光看不动手可不行,练才是王道!
全套SQL学习资源:资料+练习+视频,一步到位!强烈安利这个自学网站👉🏻 SQL自学网 http://xuesql.cn 入门首选,零基础也能轻松上手: https://www.w3schools.com
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049428/viewspace-3175328/ ,如需转载,请注明出处,否则将追究法律责任。