案例:分库分表与SELECT * 发生的线上问题

其他人踩的坑

环境说明:MySQL数据库中间件使用的是myhub
电商有一张MySQL表是分表的,的同事在给该表加字段的时候,存在一个阶段是,部分分表已经加字段成功,部分分表还未执行变更。

在该阶段,如果服务执行查询SQL,且SQL的写法为【select * from tab】,MyHub下发SQL到分表执行,会导致MyHub检查到本次查询的字段不一致,已变更的分表比未变更的分表多一个字段,然后抛java.sql.SQLException: Unknown error,会导致SQL和接口报错

我的亲身经历

我在给另一个关联关系表,该表是分表(256张分表),加字段提交到线上的变更的时候,审批的同事问我是否有使用select *的SQL,经过提示,我才意识到可能会踩同样的坑。

如何规避

  1. MySQL中间件和我们中间件一样存在该漏洞,变更是串行执行,且也会校验字段是否一致
  2. 要加字段的表是分表设计的
  3. 针对上述表,有select * 的SQL

同时满足上述3个条件才会踩到这个坑,破坏任一条件都不会踩到这个坑,不过对普通开发来说,可能最好的规避手段就是在分库分表的同事不要使用 select *

TODO: 后面抽空补充我们的表设计,和加字段sql,以及我们规避select * 使用的最佳实践

相关推荐

  1. 案例分库SELECT * 发生线问题

    2024-07-14 06:00:02       26 阅读
  2. MySQL分库设计思路

    2024-07-14 06:00:02       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 06:00:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 06:00:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 06:00:02       62 阅读
  4. Python语言-面向对象

    2024-07-14 06:00:02       72 阅读

热门阅读

  1. TypeScript的类型谓词与控制流分析

    2024-07-14 06:00:02       27 阅读
  2. ThreadLocal详解

    2024-07-14 06:00:02       22 阅读
  3. 小程序如何刷新当前页面

    2024-07-14 06:00:02       27 阅读
  4. qt 根据名称获取按钮,并添加点击事件

    2024-07-14 06:00:02       20 阅读
  5. Linux开发讲课37--- ARM的22个常用概念

    2024-07-14 06:00:02       29 阅读
  6. VMware 虚拟机 Windows 系统卡顿解决

    2024-07-14 06:00:02       27 阅读
  7. 【Linux】常用命令大全

    2024-07-14 06:00:02       31 阅读
  8. IOS热门面试题(一)

    2024-07-14 06:00:02       31 阅读
  9. SD card知识学习

    2024-07-14 06:00:02       21 阅读
  10. 洞察构建脉络:Kylin Cube构建过程的监控之道

    2024-07-14 06:00:02       31 阅读
  11. 使用个人p12证书请求https接口数据

    2024-07-14 06:00:02       27 阅读