mysql进阶&复制表语句insert into table() select () from table

一、insert into…select …PK select into from…

-- 注意mysql不支持该语法
select * into target_table from source_table;
-- mysql中可使用下面代替select ... into 
Create table Table2 (Select * from f6dos.1);
Create table Table3 (Select q from f6dos.1);

-- 常用这个语句
insert into target_table(column1,column2) select column1,5 from source_table; 

以上两句都是将源表source_table的记录插入到目标表target_table,但两句又有区别。
第一句(select into from)要求目标表target_table不存在,因为在插入时会自动创建。mysql暂时不支持该语法
第二句(insert into select from)要求目标表target_table存在,由于目标表已经存在,所以我们除了插入源表source_table的字段外,还可以插入常量,

二、insert into…select造成锁表

当迁移的表数据量比较多大的时候危险。
insert into … select容易造成死锁的原因,后面的select语句对后表会逐步加s锁,前面的insert数量不一定,导致锁住另一个表整表auto-inc锁。 锁越多越容易出现死锁问题。

三、表归档

-- 复制表结构,新建临时表
create table gb_user_sel_history_tmp like gb_user_sel_history ;
-- 复制数据
insert into table1 
select * from table2 where create_date >'2019-09-15';
-- 快速切换表
rename table table1 to table2;

注意: select 后面的表语句可以是复合语句,包括各种连表操作。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值