OBCP第三章 SQL引擎高级技术-DML语句处理

DML语句处理

数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE三种指令为核心

DML的主要功能即是访问数据,因此其语法都是以读取与写入数据库为主,除了INSERT以外,其他指令都可能需搭配WHERE指令来过滤数据范围,或是不加WHERE指令来访问全部的数据

数据库还支持REPLACE和INSERT INTO...ON DUPLICATED KEY UPDATE两种DML语句

所有的 DML 语句都会生成对应的执行计划来进行数据的读写操作,每一种 DML 语句都会生成一种对应的 DML 算 子。DML 算子负责读取数据,并通过存储层提供的数据写入接口将 DML 语句涉及到的数据写入存储引擎中

DML语句处理-INSERT执行计划示例

对于INSERT/REPLACE语句而言,由于其不用读取表中的已有数据,因此,INSERT语句的执行计划相对简单,其执行 计划为简单的EXPR VALUES+INSERT OP算子构成:

DML语句处理-UPDATE执行计划示例

对于UPDATE或者DELETE语句而言,优化器会通过代价模型对WHERE条件进行访问路径的选择,或者ORDER BY数据 顺序的选择:

DML语句处理-DELETE执行计划示例

对于UPDATE或者DELETE语句而言,优化器会通过代价模型对WHERE条件进行访问路径的选择,或者ORDER BY数据顺序的选择:

DML语句处理-一致性校验

DML操作的表对象每一列都有相关的约束性定义,例如列的NOT NULL约束,UNIQUE KEY约束等。为保证写入数据的类型同 Schema 中列定义的类型保持一致,在 DML语句最终写入数据前需要进行如下操作:

1.对列的 NOT NULL、UNIQUE KEY 约束检查

2. 对写入数据进行类型转换

约束性检查失败,需要回滚该DML语句写入的脏数据

DML语句处理-锁管理

加锁时机 -通过MVCC和锁结合的机制

  1. 只有行锁,没有表锁;在线DDL,不中断DML
  2. 尽量避免大量DML语句对同一行进行频繁的并发读写
  3. 热点行:可以使用SELECT...FOR UPDATE先对该行加锁,然后再执行DML操作

加锁顺序

DML会级联的同步更新数据表中的数据和索引表中的数据

local index 和 单表 global index,绑定

分区表global index,完全独立

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柯西极限存在准则

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

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

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

打赏作者

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

抵扣说明:

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

余额充值