drop table - by 姜少华1
需积分: 0 85 浏览量
更新于2022-08-08
收藏 20KB DOCX 举报
《MySQL中的DROP TABLE操作详解》
在MySQL数据库中,`DROP TABLE`命令是一个常见的DDL(Data Definition Language)操作,用于删除指定的表及其相关数据。本文将深入解析MySQL 5.7.26及8.0版本中`DROP TABLE`的具体实现过程。
我们从标题"drop table - by 姜少华1"可以看出,这是一篇关于MySQL中删除表操作的文章,由姜少华1撰写。接下来,让我们详细探讨这个过程。
1. **MDL锁**:
在删除表之前,MySQL会申请对目标表的MDL(Metadata Lock)写锁。这确保了在删除过程中,其他线程无法执行DML(Data Manipulation Language)操作,如INSERT、UPDATE或DELETE,但允许查询操作。
2. **全局数据字典锁**:
获得dict_sys->mutex,这是一个全局数据字典的锁,用于保护数据字典信息。在这个阶段,DML语句会被阻塞,但查询可以继续。
3. **启动DDL事务**:
使用`trx_start_for_ddl`启动一个InnoDB DDL事务,保证操作的原子性。
4. **标记待删除**:
设置table->to_be_dropped为true,标记该表即将被删除。
5. **后台删除列表**:
`row_add_table_to_background_drop_list`将表添加到后台删除列表,这可能涉及到后台线程的处理机制,具体作用可能是在不影响当前操作的情况下,延迟某些清理工作。
6. **系统表信息清理**:
通过拼接SQL,清除系统表中的表信息,包括释放主键和二级索引树,以及清理AHI(Adaptive Hash Index)。
7. **删除表空间**:
`row_drop_single_table_tablespace`执行懒惰删除,清理缓冲池的flush列表,避免一次性释放大量资源。这个过程涉及多次持有和释放buffer pool mutex以及flush list mutex,以优化CPU资源的使用。
8. **写入redo日志**:
记录MLOG_FILE_DELETE类型的redo日志,确保在系统崩溃时能够恢复。
9. **删除ibd文件**:
使用`unlink`函数删除与表对应的.ibd文件,这是物理删除表的文件操作。
10. **提交DDL事务**:
通过`trx_commit_for_mysql`提交InnoDB的DDL事务,保证所有更改持久化。
11. **释放全局数据字典锁**:
释放之前获取的dict_sys->mutex。
12. **释放MDL锁**:
释放对表的MDL写锁,允许其他操作继续。
在MySQL 8.0中,`DROP TABLE`的实现略有不同,增加了对XID状态、日志记录格式、以及临时表删除的检查,并且在删除过程中涉及到了更多的锁管理和缓存管理操作。例如,`mysql_rm_table_no_locks`函数用于执行删除,`drop_base_table`处理单个基表的删除,而`tdc_remove_table`则用于从表定义缓存中移除表信息。此外,还涉及到了对表缓存和表定义缓存的锁定,以确保在操作期间的数据一致性。
总结来说,`DROP TABLE`操作在MySQL中是一个涉及多步骤的过程,它不仅需要对表进行元数据的修改,还要确保数据的完整性和系统的稳定性。通过理解这些步骤,我们可以更好地理解和优化数据库的维护操作。
今年也要加油呀
- 粉丝: 26
- 资源: 312
最新资源
- 前端教程-JS canvas圆和线
- CANopen 协议规范
- 自动化手机标牌组装机工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 自动检测设备含bom工程图机械结构设计图纸和其它技术资料和技术方案非常好100%好用.zip
- 2024--2025-1爬虫复习题库 (1).zip
- Android Studio Ladybug(android-studio-2024.2.1.12-windows-zip.zip.002)
- c++实现的飞机大战,雷霆战机模拟源码
- 资源名称上传资源图片高清
- Python代码示例实现带装饰物的圣诞树绘图
- Android Studio Ladybug(android-studio-2024.2.1.12-windows-zip.zip.001)
- CTF - Misc - 图片隐写 - 001-cat.jpg
- 基于ASP.NET的汉字资料库毕业设计
- 聚合DNS已更新SSL证书自动申请与部署功能
- 网络实践3121212121
- ISO13400 1-4规范DoIP协议
- python源码学习,内附教程,测试完全可以跑通,测试无误,放心验证,学会使用python工具