数据库自动更新的实现--php项目(1)

来源:互联网 发布:java在线支付 编辑:程序博客网 时间:2024/06/05 01:17

实习的时候做一个php的项目,项目中使用了mysql数据库,由于项目规模和需求的变更,经常需要对数据库的设计进行更新,有的时候需要加一些字段,有的时候需要加一些表,每次在不同的开发人员的电脑上和在服务器上部署项目的时候,都要手动更新数据库,这样比较麻烦,也比较容易出错,很难保证这么多主机上所有的数据库都完全一致,所以师兄就让我研究了一下如何将数据库更新写到程序中。
查阅了一些资料,好多人都是将更新写到升级脚本中,有的比较难理解,而且直接用在php项目中不太好用。github上也有很多人在做相关php数据库更新的项目,项目整体而言比较大,完全可以作为一个单独的 开发项目来做,当然实现的功能也比较全面。
由于这个项目中需要更新的数据库内容并没有那么复杂,而且几乎不需要去删除任何东西,只涉及到增和改,就考虑自己来写一些源码进行实现,尽量保证了源码功能的简洁。但足够更新现有的数据库。本文先说一下实现的思路,不贴源码。
首先要对比已经更新过的数据库和原有数据库之间的差异,当然这个差异有一定的限制,只比较了更新后的数据库中有哪些东西是原数据库中没有的。当然比较的前提是本地存在这两个数据库,一般本地只有一个数据库(原数据库),所以我将更新后的数据库导出sql文件,在php后端程序中运行了这个sql文件,将它变为可以与本地原有的数据库进行比较的,当更新完成后,再将其删掉(其实这个数据库就是为了和原数据库进行比较才创建的)。
其次,比较的时候,先比较两个数据库的表是否完全一致,如果不一致,一般是更新的数据库中添加了表(一般不删表,因为表中可能存有某些有意义的历史数据,删除会有影响,所以一般不删表或字段),那就在本地数据库将表建好。若两个数据库表一致(即更新的数据库中未添加新表),则比较两个数据库中相同表的表结构是否一致,若不一致,则说明表中增加了字段或修改了字段的类型或者修改了默认值,则对该表的结构进行更新。实现的思路还是比较简单清晰。
当时数据库更新作为系统的一个功能放进系统,我就将这个功能放在了系统登录的时候进行触发。但是数据库更新操作是有风险的,经常会出现更新报错的情况,这样就会导致系统无法登录,所以更新操作不能每次都做,需要在特定的条件下触发,也就是在需要更新的时候才去触发,所以每次都要去对比系统数据库的版本号,如果当前版本已经是最新版本,则不需要对其进行更新。
虽然只是一个系统的一个子功能点,但是实现的过程中还是踩了不少雷,后面会继续介绍部分实现的php源码和遇到的一些问题以及解决方法。

原创粉丝点击