Skip to content

面试速答(先看这里)

**一句话结论:**一般来说不需要,因为大部分公司是不允许删除字段的,DDL变更也必须要向下兼容,所以不太需要这个开关。

60秒标准回答:

一般是先执行DDL变更,比如增加索引,或者新增字段,要先把DDL变更发布了,然后再发布代码,这样的话不会有报错,如果先发布代码,会因为DDL未变更导致字段找不到的问题

一般来说不需要,因为大部分公司是不允许删除字段的,DDL变更也必须要向下兼容,所以不太需要这个开关

如果是不兼容变更,那么就可以做个开关,但是这样的话代码就很复杂。。。不建议

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **项目发布的时候,是先升级程序,还是先执行ddl的sql:**一般是先执行DDL变更,比如增加索引,或者新增字段,要先把DDL变更发布了,然后再发布代码,这样的话不会有报错,如果先发布代码,会因为DDL未变更导致字段找不到的问题。
  • **要不要做个开关,来兼容ddl的sql变更:**一般来说不需要,因为大部分公司是不允许删除字段的,DDL变更也必须要向下兼容,所以不太需要这个开关。
  • **超大表的ddl的sql执行,需要注意什么?:**不要在业务高峰期执行,因为虽然MySQL 5.6中支持ONLINE DDL了,DDL过程中不会锁表了。
  • **在Spring Boot中,使用JPA来自动更新数据库表结构,推荐吗?:**在生产环境中,直接使用 ddl-auto=update 存在风险。

**记忆锚点:**DDL → ddl → sql → ddl-auto → update → JPA

关键取舍:

  • 但是Online DDL 在执行过程中会占用系统资源,如 CPU、内存和 I/O。
  • 这可能会对数据库的性能产生一定影响,尤其是在数据量较大的情况下。
  • 复杂的表结构变更(如字段重命名、大规模数据迁移、索引变更等)可能会引发数据丢失或性能问题。

易错提醒:

  • 要不要做个开关,来兼容ddl的sql变更 一般来说不需要,因为大部分公司是不允许删除字段的,DDL变更也必须要向下兼容,所以不太需要这个开关。
  • 不建议 超大表的ddl的sql执行,需要注意什么?

加分表达:

  • 项目发布的时候,是先升级程序,还是先执行ddl的sql 一般是先执行DDL变更,比如增加索引,或者新增字段,要先把DDL变更发布了,然后再发布代码,这样的话不会有报错,如果先发布代码,会因为DDL未变更导致字段找不到的问题。
  • 如果是不兼容变更,那么就可以做个开关,但是这样的话代码就很复杂。

追问准备:

  • 不建议 超大表的ddl的sql执行,需要注意什么?
  • 在Spring Boot中,使用JPA来自动更新数据库表结构,推荐吗?

典型回答 ​

项目发布的时候,是先升级程序,还是先执行ddl的sql ​

一般是先执行DDL变更,比如增加索引,或者新增字段,要先把DDL变更发布了,然后再发布代码,这样的话不会有报错,如果先发布代码,会因为DDL未变更导致字段找不到的问题。

要不要做个开关,来兼容ddl的sql变更 ​

一般来说不需要,因为大部分公司是不允许删除字段的,DDL变更也必须要向下兼容,所以不太需要这个开关。

如果是不兼容变更,那么就可以做个开关,但是这样的话代码就很复杂。。。不建议

超大表的ddl的sql执行,需要注意什么? ​

不要在业务高峰期执行,因为虽然MySQL 5.6中支持ONLINE DDL了,DDL过程中不会锁表了。但是Online DDL 在执行过程中会占用系统资源,如 CPU、内存和 I/O。这可能会对数据库的性能产生一定影响,尤其是在数据量较大的情况下。

📄 ✅MySQL做索引更新的时候,会锁表吗?

打开文档:✅MySQL做索引更新的时候,会锁表吗?

在Spring Boot中,使用JPA来自动更新数据库表结构,推荐吗? ​

那肯定是不推荐啊!

在生产环境中,直接使用 ddl-auto=update 存在风险。复杂的表结构变更(如字段重命名、大规模数据迁移、索引变更等)可能会引发数据丢失或性能问题。

使用 ddl-auto=update 时,数据库变更的历史没有被记录下来,难以追踪变更的具体原因和执行时间。这对于维护和调试会带来困难。

有些变更(如外键关系的修改、大规模数据迁移、触发器等)无法通过 JPA 的自动更新来完成,需要手动编写 DDL 脚本。