数据库自动更新的实现--php项目(1)
2017-09-17 23:31
309 查看
实习的时候做一个php的项目,项目中使用了mysql数据库,由于项目规模和需求的变更,经常需要对数据库的设计进行更新,有的时候需要加一些字段,有的时候需要加一些表,每次在不同的开发人员的电脑上和在服务器上部署项目的时候,都要手动更新数据库,这样比较麻烦,也比较容易出错,很难保证这么多主机上所有的数据库都完全一致,所以师兄就让我研究了一下如何将数据库更新写到程序中。
查阅了一些资料,好多人都是将更新写到升级脚本中,有的比较难理解,而且直接用在php项目中不太好用。github上也有很多人在做相关php数据库更新的项目,项目整体而言比较大,完全可以作为一个单独的 开发项目来做,当然实现的功能也比较全面。
由于这个项目中需要更新的数据库内容并没有那么复杂,而且几乎不需要去删除任何东西,只涉及到增和改,就考虑自己来写一些源码进行实现,尽量保证了源码功能的简洁。但足够更新现有的数据库。本文先说一下实现的思路,不贴源码。
首先要对比已经更新过的数据库和原有数据库之间的差异,当然这个差异有一定的限制,只比较了更新后的数据库中有哪些东西是原数据库中没有的。当然比较的前提是本地存在这两个数据库,一般本地只有一个数据库(原数据库),所以我将更新后的数据库导出sql文件,在php后端程序中运行了这个sql文件,将它变为可以与本地原有的数据库进行比较的,当更新完成后,再将其删掉(其实这个数据库就是为了和原数据库进行比较才创建的)。
其次,比较的时候,先比较两个数据库的表是否完全一致,如果不一致,一般是更新的数据库中添加了表(一般不删表,因为表中可能存有某些有意义的历史数据,删除会有影响,所以一般不删表或字段),那就在本地数据库将表建好。若两个数据库表一致(即更新的数据库中未添加新表),则比较两个数据库中相同表的表结构是否一致,若不一致,则说明表中增加了字段或修改了字段的类型或者修改了默认值,则对该表的结构进行更新。实现的思路还是比较简单清晰。
当时数据库更新作为系统的一个功能放进系统,我就将这个功能放在了系统登录的时候进行触发。但是数据库更新操作是有风险的,经常会出现更新报错的情况,这样就会导致系统无法登录,所以更新操作不能每次都做,需要在特定的条件下触发,也就是在需要更新的时候才去触发,所以每次都要去对比系统数据库的版本号,如果当前版本已经是最新版本,则不需要对其进行更新。
虽然只是一个系统的一个子功能点,但是实现的过程中还是踩了不少雷,后面会继续介绍部分实现的php源码和遇到的一些问题以及解决方法。
查阅了一些资料,好多人都是将更新写到升级脚本中,有的比较难理解,而且直接用在php项目中不太好用。github上也有很多人在做相关php数据库更新的项目,项目整体而言比较大,完全可以作为一个单独的 开发项目来做,当然实现的功能也比较全面。
由于这个项目中需要更新的数据库内容并没有那么复杂,而且几乎不需要去删除任何东西,只涉及到增和改,就考虑自己来写一些源码进行实现,尽量保证了源码功能的简洁。但足够更新现有的数据库。本文先说一下实现的思路,不贴源码。
首先要对比已经更新过的数据库和原有数据库之间的差异,当然这个差异有一定的限制,只比较了更新后的数据库中有哪些东西是原数据库中没有的。当然比较的前提是本地存在这两个数据库,一般本地只有一个数据库(原数据库),所以我将更新后的数据库导出sql文件,在php后端程序中运行了这个sql文件,将它变为可以与本地原有的数据库进行比较的,当更新完成后,再将其删掉(其实这个数据库就是为了和原数据库进行比较才创建的)。
其次,比较的时候,先比较两个数据库的表是否完全一致,如果不一致,一般是更新的数据库中添加了表(一般不删表,因为表中可能存有某些有意义的历史数据,删除会有影响,所以一般不删表或字段),那就在本地数据库将表建好。若两个数据库表一致(即更新的数据库中未添加新表),则比较两个数据库中相同表的表结构是否一致,若不一致,则说明表中增加了字段或修改了字段的类型或者修改了默认值,则对该表的结构进行更新。实现的思路还是比较简单清晰。
当时数据库更新作为系统的一个功能放进系统,我就将这个功能放在了系统登录的时候进行触发。但是数据库更新操作是有风险的,经常会出现更新报错的情况,这样就会导致系统无法登录,所以更新操作不能每次都做,需要在特定的条件下触发,也就是在需要更新的时候才去触发,所以每次都要去对比系统数据库的版本号,如果当前版本已经是最新版本,则不需要对其进行更新。
虽然只是一个系统的一个子功能点,但是实现的过程中还是踩了不少雷,后面会继续介绍部分实现的php源码和遇到的一些问题以及解决方法。
相关文章推荐
- (转)在Web项目中使用LiquiBase实现数据库自动更新
- (转)在Web项目中使用LiquiBase实现数据库自动更新
- 利用PHP安装windows自动运行的服务,PHP程序可以实现长时间、自动运行、定时更新功能,直接可以用在项目中的类源代码
- 将DataSet更新自动提交到数据库工具类实现
- PHP实现网页自动更新块
- JQuery Slider 实现时间刻度滑动条,用以编辑项目/起始时间(手动输入可自动更新到滑动条)
- 转载:PHP实现网页自动更新块
- PHP,操作多个用户,多个线程的session,实现用户登陆状态session值的自动更新
- windows批处理实现自动更新部署Web项目
- 基于Jenkins 实现php项目的自动化测试、自动打包和自动部署
- php+sql创建本地项目详细步骤4——编辑更新数据库数据
- 利用svn的commit hooks,实现服务器项目自动更新
- 基于Jenkins 实现php项目的自动化测试、自动打包和自动部署(-)
- 将DataSet更新自动提交到数据库工具类实现
- 基于Jenkins 实现php项目的自动化测试、自动打包和自动部署
- svn提交自动更新服务器端web项目测试站点(使用svn的hooks实现)
- Datagridview实现自动更新到数据库
- 用数据库和C# Web Service实现客户端文件自动更新
- PHP,操作多个用户,多个线程的session,实现用户登陆状态session值的自动更新
- web服务文件更新自动同步、数据库主从复制、shell脚本实现网站代码备份和mysql备份