如何关联MySQL中information_schema的两张表获取InnoDB表ID?
关于获取MySQL表ID的问题解答
1. 能否关联两张表一次获取指定表ID?
完全可以,不需要分两次查询。用LEFT JOIN关联两张表就能一次覆盖所有引擎的表:
SELECT t.table_name, t.engine, st.table_id FROM information_schema.tables t LEFT JOIN information_schema.innodb_tables st ON CONCAT(t.table_schema, '/', t.table_name) = st.name WHERE t.table_schema = ? AND t.table_name = ?;
这个查询会返回目标表的引擎类型和对应的InnoDB表ID(仅InnoDB表有值),非InnoDB表的table_id会显示NULL,客户端直接判断这个值就能处理两种情况,省去了多次查询的麻烦。
2. 你提到的SQL是否可用?
你写的这条SQL是可以用的:
SELECT st.table_id FROM information_schema.INNODB_TABLES st WHERE CONCAT(?,'/', ?) = st.name;
但它只适合确定目标表是InnoDB引擎的场景,或者你能接受非InnoDB表返回空结果的情况。如果要兼容所有引擎类型,还是推荐上面的LEFT JOIN方案——它能统一返回结果格式,减少客户端的逻辑分支。
另外要注意,innodb_tables.name的格式确实是库名/表名,所以CONCAT的写法是正确的,但要确保传入的库名和表名没有特殊字符(比如斜杠),避免匹配出错。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

