前言
项目迭代过程中避免不了对表结构进行更改,比如为某张表增加一个字段。由于客户现场可能部署的版本不同,所以表的字段版本可能也不同,比如user
表的name
字段,A客户已经有name
字段,B客户还没有name字段,有时就要求程序中的初始化表语句的sql要支持可重复执行且不报错。如添加字段:
ALTER TABLE `user` ADD column `name` varchar(64)
如果表中已有这个字段时,执行此sql就会报错。
解决
set @exist := (select count(*)
from information_schema.columns
where table_name = 'user'
and COLUMN_NAME = 'name'
and table_schema = database());
set @sqlstmt := if(@exist > 0, 'select ''INFO: Column name of user already exists.''',
'ALTER TABLE `user` ADD column `name` varchar(64)');
PREPARE stmt FROM @sqlstmt;
EXECUTE stmt;
此sql完成的逻辑为:查询当前数据库中user表是否存在name的字段,如果存在则输出信息:INFO: Column name of user already exists.
如果不存在则执行sql:ALTER TABLE user ADD column name varchar(64)