网站推广服务chuseo,营销网站的建设流程,中药材网站开发,什么网站可以免费做视频的软件有哪些前言
前面 我们探讨了 索引记录的 新增, 更新, 删除
这里 我们来看一下 mysql 的核心数据记录的 新增更新删除
这里 来看一下 增删改 的相关实现
数据记录 和 索引记录 的处理方式是一致的 mysql 数据记录的存储
新增部分参见 自增长主键的实现 以及 记录的插入 mysql…前言
前面 我们探讨了 索引记录的 新增, 更新, 删除
这里 我们来看一下 mysql 的核心数据记录的 新增更新删除
这里 来看一下 增删改 的相关实现
数据记录 和 索引记录 的处理方式是一致的 mysql 数据记录的存储
新增部分参见 自增长主键的实现 以及 记录的插入 mysql 数据记录的更新
主要是分为几种情况, 如果各个字段的长度没有变化, 则直接在原有的记录上面更新
否则 将更新拆分为 删除 新增 操作 如果更新之后占用的空间大于目前占用的空间
因为 mysql 实际存储的 rec 是紧凑布局的
因此 需要存储的记录空间大于更新之前的记录空间, 则需要删除原有的记录, 新增更新之后的记录 如果更新之后占用的空间等于目前占用的空间
直接在当前记录的基础上面更新
执行sql 更新如下 “update tz_test_02 set field1 field35 where id 35;”
记录 35 的当前状态如下, 我们这里更新 field1 字段为 “field35” 更新的时候 上下文如下
data 为待更新的目标值, data 为从 record 中获取的 field1 的地址
这里使用 memcpy 更新 record.field1 更新之前, rec 信息如下 更新之后 rec 信息如下 如果更新之后占用的空间小于目前占用的空间
直接在当前记录的基础上面更新
执行sql 更新如下 “update tz_test_02 set field1 field3 where id 35;”
这里判断更新字段的字段大小有调整, 这里直接返回 false, 外面退出 row_upd_clust_rec 之后走 btr_cur_pessimistic_update, 删除原有记录, 新增更新之后的记录 走悲观处理流程, 删除原有的记录, 新增更新之后的记录 mysql 记录的删除
这里以更新记录, 增加记录所需要的空间长度为例来调试 记录的删除
执行 sql 如下 “update tz_test_02 set field1 field33111 where id 148;” 删除类似于如下 prev-next current-next
只是 next 是根据偏移的来计算 将当前节点的 next 更新为 page-FREE, 然后更新 page-FREE 为 current 待删除记录信息如下, 这就是 148 记录更新之前的情况 执行 sql 如下 “delete from tz_test_02 where id 148;”
任务执行的时候, 在记录上面打上了 删除标记 删除的时候情况如下, 这是在 任务 中删除的 完