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 有任务来将数据进行 "物理删除", 可以参见后面的 数据记录的增删改查 的文章

索引记录信息如下

相关推荐
看山还是山,看水还是。1 小时前
MySQL 管理
数据库·笔记·mysql·adb
momo小菜pa1 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke1 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
小宇成长录2 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.2 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
权^3 小时前
MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
大数据·数据库·学习·mysql
万事大吉CC7 小时前
mysql单表查询·3
数据库·mysql
苹果醋313 小时前
大模型实战--FastChat一行代码实现部署和各个组件详解
java·运维·spring boot·mysql·nginx
计算机学姐16 小时前
基于SpringBoot+Vue的高校运动会管理系统
java·vue.js·spring boot·后端·mysql·intellij-idea·mybatis
-XWB-16 小时前
【MySQL】数据目录迁移
数据库·mysql