最近的项目中,有个需求需要重新创建字段,但是老的版本已经上线,原来的数据我们不能给它破坏,所以就需要判断一下是否已经存在那个字段,如果不存在就新建一个,如果存在就什么也不做。
遇到的问题
解决这个问题的时候,google了不少的办法,但是没有成功。无论是使用if条件判断,还是使用exist函数的时候都会报错。
|
|
这个时候会报出字段不存在的错,在执行select这条命令的时候,由于数据表中还没有columnName这个字段,也就不认识columnName,所以报错。
类似的,中间还出过几个错,在这里就不一一列举了。
最终的解决办法
最后的解决办法是在一个mysql的官方讨论区里找到的。在这里先给出解法。
|
|
下面我做下简单解释。
1.首先,定义了三个变量,分别为数据库名,表名,字段名,这是后面会重复用到的,所以在这里进行定义。
2.然后定义了另一个变量,这个变量主要执行查找select,查找是否存在我们要添加的字段的相关记录。
3.最后是这个解法的最特别之处:定义一个预处理变量,这个变量就是处理上面我们的查找的那个变量,然后执行预处理。最后Deallocate一下,释放所使用的数据库资源
预处理语句
好了,问题解决了,但是肯定还是有疑惑的:什么是预处理语句呢?
MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT。我们称之为【预处理语句】
预处理,顾名思义,预先处理。他会在sql执行之前进行语句解析,然后统一执行一次或多次。通过上面的例子我们可以看到,预处理其实非常简单。
笔者对sql研究较少,理解有限,所以在这里给出预处理的官方参考。
总结
通过这次编写sql语句,感受到了sql的博大,从最开始比较水比较基础的sql语句,到后面使用预处理,语句质量提升了一大步,对sql又产生了兴趣。