sql insert into select(使用select结果进行insert)

1.情景展示

现在需要将B表的数据插入A表,如何进行快速操作?

2.具体分析

批量插入,我们可以先将数据查询出来,然后再插入到指定表当中;

如何批量插入查询到的数据?

3.解决方案

以mysql进行举例说明

方式一:指定表字段;

当我们需要只往A表的部分字段插入时,使用这种方式;

比如:主键不需要我们手动插入,而是依赖mysql的主键自增属性的时候。

INSERT INTO TABLE_NAME ( CLOUMN1, CLOUMN2, COLUM3,...)
 SELECT CLOUMN1, CLOUMN2, COLUM3, ...
 FROM
	TABLE_NAME2

说明:

当我们往A表插入数据时,使用A表自增键产生值时,会引发A表主键ID不连续的问题,即:下一次新增数据的时候,会造成ID值与批量插入ID的最大值不连续。

具体原因,及解决办法见《mysql 批量修改表主键(不连续变连续)》。

方式二:所有表字段。

当我们需要往A表中插入所有字段(包括主键)时,可以使用这种方式。

INSERT INTO TABLE_NAME select * from TABLE_NAME_bak

说明:这种方式,需要A表和B表的表字段完全保持一致。

 

说明:

在默认的事务隔离级别下:insert into a select b的操作a表示直接锁表,b表是逐条加锁。

如果要想b表避免全表扫描,我们需要对where后面的条件做索引,让我们的select查询都走索引即可。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2022-05-24 10:39  Marydon  阅读(7506)  评论(0编辑  收藏  举报