MySQL进阶45讲【38】insert语句的锁为什么这么多?

1 前言

在上一篇文章中,提到MySQL对自增主键锁做了优化,尽量在申请到自增id以后,就释放自增锁。

因此,insert语句是一个很轻量的操作。不过,这个结论对于“普通的insert语句”才有效。也就是说,还有些insert语句是属于“特殊情况”的,在执行过程中需要给其他资源加锁,或者无法在申请到自增id以后就立马释放自增锁。

那么,这篇文章,我们就一起来聊聊这个话题。

2 insert … select 语句

我们先从昨天的问题说起吧。表t和t2的表结构、初始化数据语句如下,今天的例子我们还是针对这两个表展开。

CREATE TABLE `t` (
`id` int(11
  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL语句进阶可以涉及以下几个方面: 1. 子查询:子查询是将一个查询嵌套在另一个查询中的查询。它可以用于获取更复杂的结果集或根据子查询的结果进行过滤。例如: ```sql SELECT column1 FROM table1 WHERE column2 IN (SELECT column3 FROM table2); ``` 2. 联结(JOIN):联结是将两个或多个表中的行组合在一起以获取更全面的结果集。常见的联结类型有内联结(INNER JOIN)、左联结(LEFT JOIN)、右联结(RIGHT JOIN)和全联结(FULL JOIN)。例如: ```sql SELECT column1, column2 FROM table1 INNER JOIN table2 ON table1.column = table2.column; ``` 3. 窗口函数:窗口函数是一种在查询结果上执行计算的函数,它可以对分组或排序后的结果集进行操作。常见的窗口函数有排名函数(RANK)、累计函数(SUM、AVG)和偏移函数(LEAD、LAG)。例如: ```sql SELECT column1, column2, RANK() OVER (PARTITION BY column3 ORDER BY column4 DESC) AS rank FROM table1; ``` 4. 存储过程:存储过程是一组预编译的SQL语句,它可以接收参数并在数据库中执行。存储过程可以用于实现复杂的业务逻辑和提高查询性能。例如: ```sql CREATE PROCEDURE procedure_name (IN param1 INT, OUT param2 VARCHAR(255)) BEGIN -- 执行SQL语句 END; ``` 5. 触发器(Trigger):触发器是与表相关联的一种特殊类型的存储过程,它在特定的数据库操作(如插入、更新、删除)发生时自动执行。触发器可以用于实现数据约束、审计跟踪和数据同步等功能。例如: ```sql CREATE TRIGGER trigger_name AFTER INSERT ON table1 FOR EACH ROW BEGIN -- 执行SQL语句 END; ``` 这些是MySQL语句的一些进阶技巧,希望能对你有所帮助。如果你还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴名氏.

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值