展开

关键词

MySQL的insert into select 引发

数据库版本为5.51.INSERT INTO SELECTinsert into Table2(field1,field2,...) select value1,value2,... from Table1 (null, 4,4); create table t2 like t; 执行begin;insert into t2(c,d) select c,d from t; 先不commit;这个语句对 t 如果实在要使用 INSERT INTO SELECT 这种方法,可以使用下面的方法进行优化:加条件,强制走索引,不要全扫描,例如INSERT INTO Table2 SELECT * FROM Table1 CREATE table table1 as SELECT id FROM table2; -- 只复制id这一列 注意此建过程全程。语句执行完毕,才释放元数据。 其次,功能不同,INSERT INTO SELECT只是插入数据,必须先建;CREATE TABLE AS SELECT 则建和插入数据一块完成。

1.5K20

MySQL的insert into select 引发

我:“insert into select * from 呀!”大佬:“??你是不是不想混了?”?又是被大佬嫌弃的一天,为了不卷铺盖走人,我决定去学习一下备份的常见方法。 数据库版本为5.51.INSERT INTO SELECTinsert into Table2(field1,field2,...) select value1,value2,... from Table1 (null, 4,4); create table t2 like t; 执行begin;insert into t2(c,d) select c,d from t; 先不commit;这个语句对 t 如果实在要使用 INSERT INTO SELECT 这种方法,可以使用下面的方法进行优化:加条件,强制走索引,不要全扫描,例如INSERT INTO Table2 SELECT * FROM Table1 CREATE table table1 as SELECT id FROM table2; -- 只复制id这一列 注意此建过程全程。语句执行完毕,才释放元数据

11910
  • 广告
    关闭

    50+款云产品免费体验

    提供包括云服务器,云数据库在内的50+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    insert into select规则补充

    insert into select规则补充 昨天的文章中,针对insert into select语句的加情况进行了分析:insert into A select * from B;形如这样的语句 ,在statement模式的binlog下,会对B加记录和间隙,A上会有自增;而在row模式下,经过测试,B上并不会有into table_log_new select * from table_log where time>=2020-06-04 12:30:00; #在会话1的insert into select into select之前,id=9999999的code值是9999999,而在执行insert into select的时候,在另外一个会话里面,对这个id=9999999的code值进行更改,在 因此可以判断:insert into A select * from B;这个语句的row模式下,并未对B产生全的记录。而在statement模式下,上述语句会对B产生记录和间隙

    67220

    select intoinsert int select

    MySQL 是不支持 select ... into ,但是可以使用 insert into ... select 当然也可以使用 create table select * from 可以复制所有的列插入到新中 :select *into newtable from table或者复制希望的列到新中:select column_name(s)into newtable from table;INSERT INTO SELECT这个命令可以从一个复制到另一个。 这个之前的数据对最后的结果不会有影响。同 select ... into 一样,可以所有列也可以指定列。 所有数据:insert into table2select * from table1;指定列:insert into table2(solumn_name(s))select column_name(

    20220

    mysql insert into ..select 发生死问题。

    一:错误的方案:insert into ..select 嵌套复杂的算法  from ..INSERT INTO `inp_bill_detail`             (`id`,                             NOW(),             自动计费,              ,              `price_id`,               5               FROM v_bill_items WHERE ward_code IS NOT NULL ; 此种方案虽然看着简单,实际上当算法的时间较为慢时 最为可能产生数据库的死问题。 使得其他线程不能对相关的数据库的访问。 原因分析:当使用insert...select...进行记录的插入时,如果select是innodb类型的,不论insert是什么类型的,都会对select的纪录进行定。

    1.3K30

    MySQL Cases-MySQL找出谁持有行(RR)

    X:代Next-Key Lock定记录本身和记录之前的间隙(X)。S:代Next-Key Lock定记录本身和记录之前的间隙(S)。X,REC_NOT_GAP:代定记录本身(X)。 S,REC_NOT_GAP:代定记录本身(S)。X,GAP:代间隙,不定记录本身(X)。X,GAP:代间隙,不定记录本身(S)。 S,REC_NOT_GAP:代定记录本身(S)。X,GAP:代间隙,不定记录本身(X)。X,GAP:代间隙,不定记录本身(S)。 S,REC_NOT_GAP:代定记录本身(S)。X,GAP:代间隙,不定记录本身(X)。X,GAP:代间隙,不定记录本身(S)。 ,定范围为中有的值且小于9,和中大于9的那个最小值。

    26351

    ABAP INSERT FROM SELECT

    INSERT FROM TABLE SELECT FROM scarr AS s INNER JOIN spfli AS p ON s~carrid = p~carrid FIELDS s~mandt, INSERT demo_sumdist_agg FROM TABLE @temp. SELECT * FROM demo_sumdist_agg ORDER BY carrname, distid, sum_distance INTO TABLE @DATA(insert_from_table INSERT FROM SELECT INSERT demo_sumdist_agg FROM ( SELECT FROM scarr AS s INNER JOIN spfli AS p ON s~carrid SELECT * FROM demo_sumdist_agg ORDER BY carrname, distid, sum_distance INTO TABLE @DATA(insert_from_select

    32010

    20 | 幻读

    into t values(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);加:begin;select * from t where 如果SESSION 1的扫描没有用到索引,那么gap或next-key住的范围是整个,即任何值都不能插入。间隙的引入,可能会导致同样的语句住更大的范围,这其实是影响了并发度的。 -- session1BEGIN;SELECT * FROM t WHERE c=10 LOCK in SHARE mode ; -- 存在 ,成功-- session2BEGIN;SELECT * FROM * FROM t WHERE c=7 LOCK in SHARE mode ; -- c=7不存在,但是加了间隙间隙 (5,10)-- session2BEGIN;SELECT * FROM t 也就是说,我们的 t 初始化以后,如果用 select * from t for update 要把整个所有记录起来,就形成了 7 个 next-key lock,c住的范围分别是 (-∞,0]

    11910

    MySQL中 insert into select和create table的区别 已经复制的方法

    , 4,4); create table t2 like t执行insert into t2(c,d) select c,d from t;这个语句对 t 主键索引加了 (-∞,1] 这个 next-key ,强制走索引,不要全扫描,例如INSERT INTO Table2 SELECT * FROM Table1 FORCE INDEX (create_time)WHERE update_time =1 CREATE table table1 as SELECT id FROM table2; -- 只复制id这一列注意此建过程全程。语句执行完毕,才释放元数据。 其次,功能不同,INSERT INTO SELECT只是插入数据,必须先建;CREATE TABLE AS SELECT 则建和插入数据一块完成。 4.总结以上对复制来说,都不是很好的选择,分享几种平时常用的方法:select * from db1.t where a>900 into outfile server_tmpt.csv;第3、4两种方法适合整个导出

    28630

    insert语句的加情况分析

    今天在线上执行了一个insert into select的操作,背景是从一个9000w记录的日志中,根据时间字段,过滤出来最近一个月的数据,将近1000w,回写到一张新的中,时间字段上有索引。 先看SQL执行的时间吧:mysql>>insert into table_log select * from table_log_old where request_time>2020-05-03 00 01insert into select的加情况 假如我们有一个t,它有三个字段,id,c,d,其中id是主键,c是唯一索引,d是普通列,有4条记录:mysql> select * from t;+ into t2 select (c,d) from t;session 2:insert into t value (-1,-1,-1);在不加的情况下,这两个会话如果并发,在从库上的执行顺序可能变成 :insert into t value (-1,-1,-1);insert into t2 select (c,d) from t;那么此时,-1也会被写入到t2中,主从的结果就不一样了。

    88921

    浅析MySQL存储引擎序列属性

    这里分享的是InnoDB的AUTO_INCREMENT涉及到一个特殊的:自增(即:AUTO-INC lock)它属于的一种,在insert结束后立即释放。 0示traditional(旧的方式),1示consecutive(连续的,对于bulk insert,使用传统的auto-inc),2示interleaved(交替式,一般最大性能最大化可以使用 只在分配新的 ID 过程中持有一个轻量级的互斥(线程级别,而不是事务级别),而不是直到语句结束才释放的into t select null;此时会话3被阻塞会话3:mysql> insert into t values(2); mysql> select * from information_schema.INNODB_LOCKS 另外当SQL是一些批量insert sql时,比如insert intoselect …,load data,replace …select…时,这时还是,可以理解成退化为必须等待当前SQL执行完才释放

    16530

    MySQL Cases-MySQL找出谁持有行(RC)

    () where id2 < 9;select * from performance_schema.data_locks;+--------+------------------------------ () where id2 = 5;被阻塞,被阻塞的只是 id2 insert into t values(13,13,now());被阻塞会话4select *from ( select distinct `t` | id2 | RECORD || 210 | KILL 167 | S | X,GAP,INSERT_INTENTION | statementsqlselect | select * from X:代Next-Key Lock定记录本身和记录之前的间隙(X)。S:代Next-Key Lock定记录本身和记录之前的间隙(S)。X,REC_NOT_GAP:代定记录本身(X)。 S,REC_NOT_GAP:代定记录本身(S)。X,GAP:代间隙,不定记录本身(X)。X,GAP:代间隙,不定记录本身(S)。

    30541

    For update介绍

    InnoDB 默认是行级,当有明确指定的主键索引时候,是行级,否则是select * from t for update 会等待行释放之后,返回查询结果。 ,不返回结果select * from t for update skip locked 查询返回查询结果,但忽略有行的记录场景分析假设有一张商品 goods,它包含 id,商品名称,库存量三个字段 INTO `goods` VALUES (1, prod11, 1000);INSERT INTO `goods` VALUES (2, prod12, 1000);INSERT INTO `goods ` VALUES (3, prod13, 1000);INSERT INTO `goods` VALUES (4, prod14, 1000);INSERT INTO `goods` VALUES (5 查询条件为不等于或者LIKE,并且查询到数据,主键字段产生begin;select * from goods where id 1 for update;commit; begin;select *

    15231

    Mysql数据库-mysql-MyISAM-InnoDB行

    获得tb_book 的读:lock table tb_book read; 2 执行查询操作select * from tb_book; ? image-20200616171709882客户端 一 :4 查询未定的select name from tb_user; ? 客户端 二 :5 查询未定的select name from tb_user; ? 的写lock table tb_book write ; 2 执行查询操作select * from tb_book ; ? 共享(S): SELECT * FROM table_name WHERE ...

    11931

    SQL优化全套笔记

    into course values(1,‘java’,1); insert into course values(2,‘html’,1); insert into course values(3,‘ sql’,2); insert into course values(4,‘web’,3);insert into teacher values(1,‘tz’,1); insert into teacher into book values(1,‘tjava’,1,1,2) ; insert into book values(2,‘tc’,2,1,2) ; insert into book values( ’); insert into course2 values(3,‘kotlin’); commit;左连接: explain select *from teacher2 t left outer join values(‘a4’); insert into tablelock(name) values(‘a5’); commit;增加: locak table 1 readwrite ,2 readwrite

    40940

    大数据技术之_29_MySQL 高級面试重点串讲_02

    values(e); select * from mylock; 【手动增加】lock table tableName1 readwrite, tableName2 readwrite, 其它; 【查看上加过的】show open tables; 【释放】unlock tables;我们为 mylock 加 read (读阻塞写例子)? 我们为 mylock 加 write (MyISAM 存储引擎的写阻塞读例子)?案例结论?分析? 索引失效行升级为?间隙危害?面试题:如何应一行? 案列结论 Innodb 存储引擎由于实现了行级定,虽然在定机制的实现方面所带来的性能损耗可能比定会要更高一些,但是在整体并发处理能力方面要远远优于 MyISAM 的定的。

    33521

    select for update和select for update wait和select for update nowait的区别

    into TEST8 (id, orderid, productid, price, quantity) values (1, 1, 1, 6, 10);insert into TEST8 (id, 正常的检索除了数据行,当时当前数据集被加,其他会话想操作此数据集,必须等会话二中的事务commit之后,才可以进行修改4、OF子句在多查询中如果需要对多查询的结果集进行加,可以使用OF子句。 如果存在OF子句,那么就对满足OF子句的单进行加,如果不存在OF子句就对整个结果集进行加,代码如下:a、不使用OF子句select a.ID,a.Name,b.price from test6 aLEFT OF子句的进行加,在多查询中。 比对测试结果,发现在OF子句的作用下,oracle对同时满足where子句(设置要加的数据行)和OF子句(主要设置加)的数据行进行了加

    302100

    自增主键,很多人以为自己懂了,然而...

    into t1(name) values(zhangsan),(lisi),(wangwu);select * from t1;请问,被插入的三条记录,id分别为:A 0,1,2B 1,2,3C 以上都不对画外音 into t2(name) values(x),(y),(z); insert into t1(name) select name from t2;select * from t1;请问,上述insert 222),(NULL,xyz);select * from t1;请问,最后一个insert语句,执行结束后id分别是:A 1,2,3,111,222B 1,111,112,222,223C 插入失败, ),(bbb) on duplicate key update count=100;select * from t1;请问,最后一个insert语句,执行结束后id分别是:A 1,2,3,111,222,223,224,225B 更复杂的问题是:InnoDB在并发插入情况下,自增键的机制是怎样的?画外音:(1)行还是?(2)事务范围加还是SQl语句范围加?四个测验,你的答案是什么?

    16110

    数据库:MySQL 中 “select ... for update” 排他分析

    INTO `goods` VALUES (1, prod11, 1000);INSERT INTO `goods` VALUES (2, prod12, 1000);INSERT INTO `goods ` VALUES (3, prod13, 1000);INSERT INTO `goods` VALUES (4, prod14, 1000);INSERT INTO `goods` VALUES (5 , prod15, 1000);INSERT INTO `goods` VALUES (6, prod16, 1000);INSERT INTO `goods` VALUES (7, prod17, 1000 );INSERT INTO `goods` VALUES (8, prod18, 1000);INSERT INTO `goods` VALUES (9, prod19, 1000); 一、数据一致性假设有 begin;select * from goods where id 1 for update;commit; 12、只根据主键进行查询,查询条件为不等于,没有查询到数据,主键字段产生

    24840

    数据库:MySQL 中 “select ... for update” 排他分析

    INTO `goods` VALUES (1, prod11, 1000);INSERT INTO `goods` VALUES (2, prod12, 1000);INSERT INTO `goods ` VALUES (3, prod13, 1000);INSERT INTO `goods` VALUES (4, prod14, 1000);INSERT INTO `goods` VALUES (5 , prod15, 1000);INSERT INTO `goods` VALUES (6, prod16, 1000);INSERT INTO `goods` VALUES (7, prod17, 1000 );INSERT INTO `goods` VALUES (8, prod18, 1000);INSERT INTO `goods` VALUES (9, prod19, 1000);一、数据一致性假设有 begin;select * from goods where id 1 for update;commit;12、只根据主键进行查询,查询条件为不等于,没有查询到数据,主键字段产生

    1K30

    扫码关注云+社区

    领取腾讯云代金券