诺亚方舟

沉淀

判断表结构是否存在某个字段

在现实开发中,我们可能会遇到一种情况,某个大表会根据某个字段来分表,在小表结构中,可能因为升级的原因表结构字段不一致了(比方说select * from xx_a where bind_phone=’xxooooxx’,没有bind_phone这个字段的分表执行这个语句就会直接报错),那么我们怎么在代码逻辑上做兼容?很自然的一个想法就是在逻辑层面上先判断这个表结构是否存在这个字段。下面会介绍两种方法怎么样来判断:

1、利用desc命令。

desc的全称写法是describe,我们可以用这个命令来看某个表的表结构,但实际上它也可以看某个表某个字段的描述。

1
2
desc/describe table;//查看表结构
desc/describe table column;//查看表结构某个字段

php中用mysql_fetch_array()这个函数获取执行结果,数组第一个元素既是字段名称,不存在时返回null。

2、show columns from xxx

这一种方式跟上面获取到的结果是一模一样的,不同的是写法命令的差异,不再累赘描述:

1
2
show columns from table;//查看表结构
show columns from table like 'column';//查看表结构某个字段

上述方案是用来判断某个表是否存在某个字段的两种方法,当然也还有像直接取出一行数据看有没这个字段名这样粗暴的方式,个人觉得上面的写法比较优雅,而且从表结构获取无需再去磁盘获取数据可以减少一次io。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>