项目开发中,给字段添加默认值简单。但给已经存在的字段添加默认值就没那么容易。因为既要维护项目老数据,又要隔离新的数据。稍不留神,客户的数据就会乱掉。如何处理,请客官往下看!
单词语法
Default
英 [dɪˈfɔːlt] 美 [dɪˈfɔːlt]
n.违约(尤指未偿付债务);默认;系统设定值;预置值
v.违约;不履行义务(尤指不偿还债务);默认;预设;预置
第三人称单数 | defaults |
现在分词 | defaulting |
过去式 | defaulted |
过去分词 | defaulted |
派生词 | defaulter n. |
词根词缀
default | de | fault |
违约 | 加强 | 错误 |
经典例句
The default is usually the setting that most users would probably choose. |
默认选项通常是大多数人都会选择的设置。 |
编程语法
Java
需求:现数据库已经存在工单质检表。目前希望添加工单维保表。其中两张表数据结构大致相同,可以通过添加type或者mode字段进行数据隔离。
分析:
问题一:工单质检表已经存在数据,添加字段不能影响到老数据的查询。
问题二:Spring Data 的Column注解不支持修改已经存在的字段,也不能自动更新已经存在的数据。
解决:目前有两个解决方案。若有更好的思路,欢迎补充!!
思路一:添加补丁代码。针对老数据的查询条件可以设置成:type is null or type == 值。不推荐,前期偷懒的时间,后期都会补回来的。
思路二:万金油方法。利用数据迁移工具更新数据。我用的是liquibase,可以在服务启动时执行自定义sql语句,从而达到更新老数据值的效果。值得注意的是:liquibase是在spring data扫描实体之前执行。
已存在字段需要更新默认值 |
UPDATE work_order set type = 0 |
需要添加字段同时设置默认值 |
ALTER TABLE work_order ADD type INT(11) DEFAULT '0' |
选择:两种思路如何选择?大部分场景都可以用数据迁移工具。若项目已经是一个很笨重的老项目,并且项目中没有用到数据迁移工具,可以考虑使用第一种思路。
注意!注意!注意!
不要试图优化一个老项目,你将为自己的年轻买单。有价值的老项目会被重构和重写。若随意添加技术栈,结果就是这样...
往期精彩
previous
英语| 124期 Sort 坑爹的字符串排序
英语| 123期 Schedule时刻表
英语| 122期 Space空格
英语| 121期 Memory内存
英语| 120期 Variable变量
英语| 119期 Parameter参数
英语| 118期 Index 索引
英语| 117期 Divide 分开