ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TIL 实战:用 MySQL `SHOW TABLES LIKE` 按模式筛选表名,快速定位陌生库中的目标表

TIL 实战:用 MySQL `SHOW TABLES LIKE` 按模式筛选表名,快速定位陌生库中的目标表 文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载面对一个包含大量数据表且结构陌生的数据库时盲目的SHOW TABLES会把全部表名一次性抛给你很难找到目标。本文基于 TIL 仓库中 mysql/show-tables-that-match-a-pattern.md 这一篇笔记系统讲解如何利用SHOW TABLES LIKE配合通配符模式按命名规律如user、log、order精准缩小候选表范围并补充 MySQL 底层information_schema等价实现与周边命令读完即可在真实运维和排障场景中直接上手。使用场景表很多、库里不熟时如何定位正如原笔记开头所述一个“充满大量陌生表”的数据库往往难以导航——你可能只是基于在其他项目里见过的领域概念猜测目标表名大概长什么样比如用户相关的表通常包含user字样。此时如果直接执行 show tables;结果可能是一长串表名肉眼筛选既慢又容易漏。而 MySQL 的SHOW TABLES支持一个可选的LIKE子句用来按模式过滤返回的表名这正是快速收窄范围的关键手段。基础用法SHOW TABLES LIKE %user%原笔记给出了最核心的示例只要在show tables后面加上like子句并提供一个模式就能只看到名字中包含user的表 show tables like %user%; ------------------------------- | Tables_in_jbranchaud (%user%) | ------------------------------- | admin_users | | users | -------------------------------两点值得注意结果集被大幅收窄从“全部表”缩小到仅admin_users和users两张表导航成本显著降低。输出表头自解释列名Tables_in_jbranchaud (%user%)由两部分拼接而成——当前数据库名此处为jbranchaud和本次使用的模式(%user%)即使不看命令也能从结果里反推过滤条件方便复查。深入解析LIKE模式中的通配符语义LIKE子句使用的是与 SQL 字符串匹配一致的模式语法核心通配符只有两个%匹配任意长度的字符序列包括空串。%user%表示“名字中任意位置包含user”user%表示“以user开头”%user表示“以user结尾”。_匹配恰好一个任意字符。例如user_只匹配users、user1这类“user后紧跟一个字符”的表名而不会匹配user本身。实际使用中%的使用频率远高于_因为大多数场景只关心“包含某个词根”。此外需要注意匹配的大小写敏感性取决于表和数据库的 collation 设置在默认的utf8mb4_general_ci这类不区分大小写的排序规则下%USER%也能匹配到users在区分大小写的排序规则下则不会。如果对匹配行为有疑问可以先用SHOW CREATE TABLE或information_schema确认表的 collation。结合当前库与指定库使用SHOW TABLES LIKE默认作用于当前选中的数据库。有两种指定数据库的方式这与仓库中的另一篇笔记 mysql/list-databases-and-tables.md 描述的行为一致方式一先用USE切换当前库再过滤 use my_app_dev; show tables like %user%;方式二用IN db_name直接指定库无需切换 show tables in my_app_dev like %user%;方式二的优势是不改变当前会话的上下文适合在多库之间快速对照。另外如果尚未通过USE选中任何数据库、又未用IN指定库名MySQL 会报错No database selected这属于预期行为不是命令写错。等价实现直接查询information_schema.tablesSHOW TABLES LIKE本质上是 MySQL 对系统元数据库information_schema的快捷封装该库在所有 MySQL 实例中都存在仓库笔记 mysql/list-databases-and-tables.md 中SHOW DATABASES的输出也可见它。如果需要在 SQL 层面做更精细的过滤比如同时按表类型过滤、或与其它表信息联查可以直接写select table_name from information_schema.tables where table_schema my_app_dev and table_name like %user%;两种写法的语义等价但直接查询information_schema可扩展性更强你能拿到table_typeBASE TABLE/VIEW、engine、table_rows、create_time等更多元数据列方便在自动化脚本或告警查询中使用。日常手动排查时SHOW TABLES LIKE更简洁需要写脚本或联查时information_schema更合适。拓展技巧查看完整表类型与转义字面量如果还想知道匹配到的到底是普通表还是视图可改用SHOW FULL TABLES LIKE ...输出会多一列Table_type值为BASE TABLE或VIEW适合区分物理表与视图时使用。如果你的命名里本身含有%或_字面量例如表名foo_%_bar需要把它们当作普通字符匹配可在LIKE模式中配合ESCAPE指定转义符例如foo\_%\_bar以\转义下划线来精确匹配字面量。表名数量本身较大的情况下配合ORDER BY无法作用于SHOW命令但information_schema查询可以加order by table_name或limit更适合做分页式浏览。定位到表之后继续深挖表结构模式匹配只是导航的第一步。一旦锁定候选表比如确定就是users仓库中还有两篇相邻笔记可以直接衔接用DESCRIBE或SHOW CREATE TABLE查看字段与建表语句见 mysql/show-create-statement-for-a-table.md用SHOW INDEXES查看主键、唯一键等索引细节见 mysql/show-indexes-for-a-table.md。三篇笔记组合起来就构成了“模式筛表 → 查看结构 → 分析索引”的完整排障链路在接手陌生项目数据库或排查线上问题时非常实用。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐Subtitle Edit字幕创作入门网格编辑、文本编辑器与核心快捷键全解析Subtitle Edit字幕创作入门网格编辑、文本编辑器与核心快捷键全解析 Subtitle Edit 是一款免费开源的字幕编辑工具而 字幕网格编辑 、文档教程知识库MySQL技巧使用SHOW CREATE TABLE查看表结构定义jbranchaud/til项目分享MySQL技巧使用SHOW CREATE TABLE查看表结构定义jbranchaud/til项目分享 概述 在MySQL数据库管理和开发过程中了解表的文档教程知识库Archery 表定位 APITable Instance Locator实战指南按表名跨实例定位数据库Archery 表定位 APITable Instance Locator实战指南按表名跨实例定位数据库 导读 在多实例、多数据库的 SQL 审核查询平台后端数据库上一篇Shell正则表达式参考卡gh_mirrors/sh1/sh中的常用模式下一篇Conv-TasNet高级技巧多GPU训练与内存优化策略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表