大家都是知道如果我们在接口返回值添加字段或者proto中添加字段一般是不会发生不兼容的情况,那么在数据库中给表添加字段会导致不兼容问题吗?

通常情况是不会,添加字段不会影响到已有的数据,但是下面这种情况会引发不兼容

假设A表有字段id, bid, c, B表有id, d,业务中有这么一条语句

select a.id, b.d from a join b on a.bid = b.id where c = 1;

那么现在我们给B表加字段c,那么现在这个语句就会错,因为a表有个c,b表有个c,现在where条件中的c已经有歧义了,所以这条语句就会报错,所以给表加字段会引发不兼容

所以加字段的时候也要小心,sql如果是多表一定给字段加上别名,避免这种歧义就比如上面的语句就改为

select a.id, b.d from a join b on a.bid = b.id where a.c = 1;

这只能说约束我们自己,历史的老系统中有什么样的写法都未可知