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查询都走索引即可。
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/16304626.html