当前位置: 首页 > news >正文

mysql查询使用`_rowid` 虚拟列

在 MySQL 中,_rowid 是一个虚拟列,可以用来查询 InnoDB 表的内部行 ID(当表没有显式定义主键时)。以下是使用 _rowid 的 SQL 查询示例:

1. 基本查询(适用于没有主键的表)

SELECT _rowid AS internal_row_id,  -- 显示内部行IDt.*                         -- 查询所有列
FROM your_table_name t
LIMIT 10;

2. 检查表是否支持 _rowid

-- 检查表是否有主键或唯一索引
SHOW INDEX FROM your_table_name;-- 如果表没有主键,且至少有一个非空的唯一整数列,`_rowid` 会指向该列
-- 否则,MySQL 会使用内部隐藏的 rowid

在这里插入图片描述

3. 注意事项

  • _rowid 的限制

    • 仅适用于 InnoDB 表。
    • 如果表有主键,_rowid 会指向主键列。
    • 如果表没有主键但有唯一非空整数列,_rowid 会指向该列。
    • 如果表既没有主键也没有唯一非空整数列,_rowid 会显示内部隐藏的行 ID(但可能不稳定,不建议依赖它)。
  • 替代方案

    • 如果 _rowid 不可用,可以使用 ROW_NUMBER()(MySQL 8.0+):
      SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS row_num,other_columns
      FROM your_table_name;
      
    • 或者使用变量模拟行号(MySQL 5.7+):
      SET @row_number = 0;
      SELECT (@row_number:=@row_number + 1) AS row_num,other_columns
      FROM your_table_name;
      

4. 最佳实践

  • 显式定义主键:建议在表中添加 id INT AUTO_INCREMENT PRIMARY KEY,避免依赖 _rowid
  • 避免依赖内部行 ID_rowid 可能因数据重组(如 OPTIMIZE TABLE)而变化,不适合用作业务逻辑。
http://www.dtcms.com/a/255143.html

相关文章:

  • iOS APP上架App Store实践:通过自动化流程和辅助工具高效提
  • 【Python】.pyz:源码与依赖打包
  • IPv6 | 地址解析 / 地址管理 / 邻居发现协议(NDP)/ 无状态自动配置(SLAAC)
  • Spring Boot自动配置原理
  • Spring Boot + MyBatis + Vue:全栈开发中的最佳实践
  • ASP3605芯片在煤炭设备电源管理中的可靠性设计与应用探索
  • mapbox进阶,mapbox-gl-draw绘图插件扩展,编辑支持右键取消节点
  • SAP调用api
  • 创客匠人服务体系解析:知识 IP 变现的全链路赋能模型
  • 【网工】华为配置专题进阶篇③
  • FPGA--hello
  • MySQL慢SQL优化全攻略:从诊断到调优
  • C++ 学习笔记精要(二)
  • Android Kotlin 用法对比Java使用小结
  • Dilworth 定理 学习笔记
  • 智能危险品搬运机器人市场报告:行业趋势与未来展望
  • qt常用控件--01
  • 对于网站业务安全SCDN都能够从哪些方面进行保护?
  • Kafka协议开发总踩坑?3步拆解二进制协议核心
  • IP 风险画像网络违规行为识别
  • 语音相关-浏览器的自动播放策略研究和websocket研究
  • Kafka线上集群部署方案:从环境选型到资源规划思考
  • C#学习日记
  • 基于存储过程的MySQL自动化DDL同步系统设计
  • GNU Octave 基础教程(2):第一个 Octave 程序
  • 作为运营,需要在账号中给用户提供什么?
  • 文件管理总结
  • HCIP-数据通信基础
  • python高校运动会数据分析管理系统
  • LINUX620 NFS