26 mysql 索引的存储更新删除

前言

这里来看一下 mysql 中索引的 增删改查

查询在前面的系列文章中都有使用到

这里 来看一下 增删改 的相关实现

索引记录 和 数据记录 的处理方式是一致的

索引的存储

创建数据表如下, 除了主键之外, 创建了一个 field1, field2 的一个联合索引

复制代码
CREATE TABLE `tz_test_02` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `field1` varchar(12) DEFAULT NULL,
  `field2` varchar(16) DEFAULT NULL,
  `field3` varchar(24) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_composite` (`field1`,`field2`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8

将 tz_test 的数据 抽取到 tz_test_02, 然后执行 sql, "update tz_test_02 set field3 = field1;"

我们这里为了测试新增索引记录, 新增一条记录信息如下

执行 sql 如下 "INSERT INTO `test`.`tz_test_02`(`field1`, `field2`, `field3`) VALUES ('field33', '33', 'field33');"

新增记录的时候的 调用信息如下

待新增的记录信息如下

待新增的索引记录的堆栈信息如下

记录的本身, 和索引记录 是在 row_ins 的循环中, 先增加了记录信息, 然后再增加了记录的索引信息

待新增的索引记录信息如下

索引的更新

执行更新语句如下 "update tz_test_02 set field1 = 'field34' where id = 133;"

会先标记删除 旧的索引记录, 然后再根据新的记录构建 新的索引记录

新增新的索引记录情况如下

索引记录信息如下

索引的删除

执行更新语句如下 "delete from tz_test_02 where id = 133;"

这里先是讲索引记录 逻辑删除了, 然后 之后 mysql 有任务来将数据进行 "物理删除", 可以参见后面的 数据记录的增删改查 的文章

索引记录信息如下

相关推荐
自燃人~2 分钟前
为什么MySQL用b+不用B数
数据库·mysql
warton881 小时前
ubuntu24.04 安装mysql8.0.36
linux·运维·mysql
小Mie不吃饭1 小时前
Oracle vs MySQL 全面对比分析
数据库·mysql·oracle
扶尔魔ocy2 小时前
【linux C】在mysql中增加自定义的C动态库
linux·运维·mysql
kabcko3 小时前
CentOS安装Mysql
mysql·adb·centos
ruleslol3 小时前
MySQL 工具使用指南
mysql
爱学java的ptt3 小时前
mysql的存储引擎
数据库·mysql
龘龍龙3 小时前
Python基础学习(十一)
python·学习·mysql
不屈的铝合金4 小时前
SQL 语言概述与数据库核心前置配置了解
数据库·sql·mysql·约束·sql 语句分类·字符集配置·校对规则
萧曵 丶4 小时前
可重复读(Repeatable Read)隔离级别下幻读产生的原因
数据库·sql·mysql