首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL的insert into select 引发锁

MySQL一般我们在生产上备份数据通常会用到 这两种方法: INSERT INTO SELECT CREATE TABLE AS SELECT 注:本文仅针对MySQL innodb引擎,事务是可重复读...…中必须包括主键 在执行语句的时候,MySQL是逐行加锁的(扫描一个锁一个),直至锁住所有符合条件的数据,执行完毕才释放锁。...CREATE TABLE AS SELECT create table as select 会创建一个不存在的,也可以用来复制一个。...因此MySQL5.5版本开始引入了MDL锁,来保护的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。 注意: 新不会自动创建创建和原表相同的索引。...其次,功能不同,INSERT INTO SELECT只是插入数据,必须先建;CREATE TABLE AS SELECT 则建和插入数据一块完成。

2K10

MySQL的insert into select 引发锁

MySQL一般我们在生产上备份数据通常会用到 这两种方法: INSERT INTO SELECT CREATE TABLE AS SELECT 注:本文仅针对MySQL innodb引擎,事务是可重复读...…中必须包括主键 在执行语句的时候,MySQL是逐行加锁的(扫描一个锁一个),直至锁住所有符合条件的数据,执行完毕才释放锁。...CREATE TABLE AS SELECT create table as select 会创建一个不存在的,也可以用来复制一个。...因此MySQL5.5版本开始引入了MDL锁,来保护的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。 注意: 新不会自动创建创建和原表相同的索引。...其次,功能不同,INSERT INTO SELECT只是插入数据,必须先建;CREATE TABLE AS SELECT 则建和插入数据一块完成。

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

mysql 多表查询和更新_MySQL update select 多表关联查询更新

在遇到需要update设置的参数来自从其他select出的结果时,需要把update和select结合使用,不同数据库支持的形式不一样,在mysql中如下: update A inner join(select...id,name from B) c on A.id = c.id set A.name = c.name; 根据AB两个的id相同为条件,把A的name修改为B的sql语句就如上所示 参考文章:...* [UPDATESELECT使用SQL Server – 代码日志](https://codeday.me/bug/20170212/192.html) * [MySQL多表关联UPDATE操作...– jsyandxys的博客 – CSDN博客](https://blog.csdn.net/jsyandxys/article/details/83584410) * [mysql中update和select...结合使用 – 404NotFound的博客 – CSDN博客](https://blog.csdn.net/qq_36823916/article/details/79403696) * [MySQL

3.8K10

mysqlselect for update 锁的范围备注

mysql的锁范围测试 1.主键明确时,行级锁:   解释:指定主键并且数据存在时,仅锁定指定的行,其它行可以进行操作   实例:指定了锁定id=1的行且数据存在①,在更新1时lock wait超时②...,但是更新id不为1的项目时可以直接更新③,释放锁后④,可以任意更新⑤ ?...2.主键不明确时,级锁:   解释:指定主键不明确或者数据不存在时,整锁定   指定主键不明确包括使用in、not in、等  ?...3.使用非主键限定时,级锁:   解释:如果where条件中不存在主键限定而采用非主键筛选,全锁定 ? 所以要实现行级锁来实现高并发场景时,必须明确指定主键,否则整个锁定,影响其它线程操作。

3K20

mysql怎样单导入? && binlog提取指定

就是匹配.测试mysqldump中拆分出指定的使用--database和--table 匹配需要的名信息python MysqlDumpSplitSQL.py t20240228_alldb.sql.../splitByddcw_20240301_084906/dbs/ibd2sql/ddcw_alltype_table.sqlBinlog提取指定的用法和上一个脚本一样使用--database和--...table 匹配需要的名信息python binlogFtable.py /data/mysql_3314/mysqllog/binlog/m3314.000002 --database ibd2sql...但原理还是简单, 就是匹配指定的, 然后重新回放.当然如果又备库的话, 直接备库导出更方便.附脚本mysqldump拆分脚本binlog提取指定脚本如下:#!.../usr/bin/env python# -*- coding: utf-8 -*-# write by ddcw @https://github.com/ddcw# binlog里面过滤出指定的信息

19011

Mysql备份中恢复单个

因为云平台的备份是把库中所有的都打包成一个 .sql文件,然而这一个.sql文件大约有20G,现阶段的方法是把.sql文件source到数据库数据处理机器上,然后再根据需求提出需要的。...思路(原谅我也理解了好一会儿): 主要使用sed命令来实现,加上-n,-e参数把打印的结果追加到一个文件中,就得到了想要的的内容。...我们使用如下sed命令原始sql中导出wp_comments: 意思是:打印DROP TABLE....此时,lianst.wp_comments.sql 就是我们原始备份sql(lianst.sql)中导出的wp_comments的sql语句。接下来我们就可以针对这一个来进行恢复了。...#登陆Mysql服务器 [root@bj ~]# mysql -uroot -p Enter password:   mysql> source lianst.wp_comments.sql;

4.5K110

MySQL(九)之数据的查询详解(SELECT语法)二

上一篇讲了比较简单的单查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等。希望大家能都得到帮助!...这就是左外连接的意思,将左边的所有记录都显示出来(前提是按照我们所需要的字段,           也就是SELECT 后面所选择的字段)。...实例:select num1 from tb1 where num1> any(select num2 from tb2);  //这里就是将在tb2中查询的结果放在前一个查询语句中充当条件参数。...格式:          SELECT 字段名,... FROM 名          UNION[ALL]          SELECT 字段名,......注意:唯一的差别就在正则表达式不一样,一般使用这种模糊查询,使用MySQL中的'_'和'%'就已经足够了。   2)查询以特定字符或字符串结尾的记录   3)用符号"."

1.9K100

MySQL(九)之数据的查询详解(SELECT语法)一

这一篇是MySQL中的重点也是相对于MySQL中比较难得地方,个人觉得要好好的去归类,并多去练一下题目。MySQL的查询也是在笔试中必有的题目。希望我的这篇博客能帮助到大家! 重感冒下的我,很难受!...SELECT * FROM 名 WHERE 字段名 IS NULL;  //查询字段名是NULL的记录         SELECT * FROM 名 WHERE 字段名 IS NOT NULL;  ...2.13、使用LIMIT限制查询结果的数量 LIMIT[位置偏移量] 行数  通过LIMIT可以选择数据库中的任意行数,也就是不用第一条记录开始遍历,可以直接拿到 第5条到第10条的记录,也可以直接拿到第...2)select * from book limit 3,3; //第4条数据开始,往后取3条数据,也就是第4条到第7条 ?...三、组函数(集合函数)查询   MySQL中组函数有COUNT()函数、SUM()函数、AVG()函数、MAX()函数、MIN()函数   3.1、COUNT()     COUNT(*):计算中的总的行数

2.9K110

MySQL更新超时 Lock wait timeout exceeded

当添加入库失败时订单审核状态正常更新,添加入库和更新入库状态失败。这里的解决方案是: 拆分成两个方法,一个是更新订单审核状态,另一个添加入库和更新入库状态。...然而运行结果: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try...外层事务对表的更新锁住了的行,外层事务还没有提交,就调用了内层事务updatePutInStorage,内层事务调用了updatePutInStorage。...updatePutInStorage需要更新订单的入库状态,此时外层事务锁住了该,所以更新订单的入库状态无法更新。...更新订单的入库状态等待更新订单的审核状态,而REQUIRES_NEW又会让更新订单的审核状态等待更新订单的入库状态。造成相互等待,也就造成死锁。

1.3K30

InnoDB(6)索引页select --mysql入门到精通(十一)

InnoDB(5)索引页 --mysql入门到精通(十) Page directory(页目录) 我们现在知道记录页中的数据按主键从小到大的顺序组成一个单链表,那我们 查询单链表中的某一个数据该怎么办呢...最原始(笨)的发方法,当然是按顺序,Infimum(最小)记录依次慢慢从小到大查找,这种还有一个好处是,当主键值大于要找的值时,后面的就不需要找了,因为后面的主键都是递增,说明没有要找的数据。...那如果数据量太大这种查找显然不符合要求,如果你找字典,为了找一个字,第一页翻到最后一页,这显然太消耗性能,于是字典有了目录,而我们 的mysql也有page directory。...每个index数据页有页目录,页目录有两个槽点,槽0放最小记录偏移量99和槽1放最大记录偏移量112(112实际就是指页面0字节开始,数112个字节),最小记录的n_owned值为1,最大记录的n_owned...所以总结就是通过二分查找法找到对应的槽,之后最小的主键遍历当前槽。

18810

MySQLSELECT …for update

使用场景举例   商品goods中有一个字段status,status为1代商品未被下单,status为2代商品已经被下单,那么我们对某个商品下单时必须确保该商品status为1。...使用悲观锁来实现   在上面的场景中,商品信息查询出来到修改,中间有一个处理订单的过程,使用悲观锁的原理就是,当我们在查询出goods信息后就把当前的数据锁定,直到我们修改完毕后再解锁。...补充:MySQL select…for update的Row Lock与Table Lock   上面我们提到,使用select…for update会把数据给锁住,不过我们需要注意一些锁的级别,MySQL...InnoDB默认Row-Level Lock,所以只有「明确」地指定主键,MySQL 才会执行Row lock (只锁住被选取的数据) ,否则MySQL 将会执行Table Lock (将整个数据表单给锁住...select * from person where id>=2 for UPDATE   以上就是关于数据库主键对MySQL锁级别的影响实例,需要注意的是,除了主键外,使用索引也会影响数据库的锁定级别

3.7K30

select...for update 锁了?

前言 前几天,知识星球中的一个小伙伴,问了我一个问题:在MySQL中,事务A中使用select...for update where id=1锁住了,某一条数据,事务还没提交,此时,事务B中去用select...select...for update在MySQL中,是一种悲观锁的用法,一般情况下,会锁住一行数据,但如果没有使用正确的话,也会把整张锁住。...目前MySQL中使用比较多的有:锁、行锁和间隙锁。 我们这个业务场景,非常时候使用行锁。...在MySQL中是通过select...for update语句来实现的行锁的功能。 但如果你在实际工作中使用不正确,也容易把整张锁住,严重影响性能。...总结 最后给大家总结一下select...for update加锁的情况: 主键字段:加行锁。 唯一索引字段:加行锁。 普通索引字段:加行锁。 主键范围:加多个行锁。 普通字段:加锁。

25530
领券