一套程序提供给多个客户放置于不同的服务器,因为功能需要不断升级,导致升级比较麻烦,如果是程序文件的升级还比较好办,因为都是统一的,但是数据库升级就麻烦了,要只更改数据结构而不更改数据内容,即客户原有的数据不要被覆盖,是在主程序每次有更改结构之后立即记录下SQL语句(有没有自动记录方法?),然后分别让每个客户升级的时候去执行这些SQL语句吗?
一般都是手动的吧。不过像DZ这样的程序是可以自动更新的。
我认为思路是这样:
你需要对每个版本做详细记录,如从1.0到1.1增加了哪些字段、表,修改了哪些数据类型,然后写成相应的SQL语句,保存起来。然后 从1.1到2.0又做了哪些修改,也写成sql语句保存起来。
然后 客户要升级时,你只要跟据他的版本,逐版本升级就ok了。
客户原有的数据可以被删除不?
不行啊,因为客户已经处于运营阶段,只是我们每年给他升级服务,不断新增功能而已
@ludi: 那么如果你更改了表结构,将原来的 5 列变成了 4 列,那么请问,客户的数据库中的对应表怎么变?
@Launcher: 客户数据库完全和我这边总的结构一样,即字段名及属性是完全一样的,只是他的数据内容不一样而已,例如他的会员表可能有很多会员记录,而我这边可能没有记录
@ludi: 那么你们究竟是要改什么呢?
@Launcher: 就比方说你们做一套系统卖给很多客户,必定会不断地去升级完善这套系统,这无可厚非地会去改动数据库的字段(主要是新增字段和新增表),你不可能逐一的通过sql管理工具去重复一次开发阶段对数据库所做的更改吧?
@ludi: 你不用比如说,你的说你们具体要修改啥,我最开始根据你说的"原有的数据不要被覆盖",那么我就想到删除列不在你这个“覆盖”范围内,所以问你,然后你告诉我"客户数据库完全和我这边总的结构一样,即字段名及属性是完全一样的,只是他的数据内容不一样而已,例如他的会员表可能有很多会员记录,而我这边可能没有记录",所以我才问你到底修改啥!那么你现在又告诉我"这无可厚非地会去改动数据库的字段(主要是新增字段和新增表)",那么还是那句话,你能把你们的需求讲清楚吗?
@ludi: 那么我们现在确定你们会修改表结构,而且"主要是新增字段和新增表",那么不主要的呢?还是说你们的数据库改动仅仅限制在“新增字段和新增表”这两项上?
网站?数据库。。。。。。。。 如果想自动的, 就要像挂马一样…………
原理无非是, 在客户后台嵌入脚本, 隐藏页去做一系列操作。
但是要自己也得注意安全性, 你可以在自己的服务器端做个服务, 客户那边的站点来访问, 进行认证, 下载sql脚本进行操作之类的。
这只是说自动的, 如果手动提示有更新的话, 那更加简单。
数据库升级一般都是让客户端去执行sql,你可以在更新的时候先执行这个sql就OK了。
是的,那么在开发阶段要怎么整理这些sql,有没有一种工具能自动生成这些做过局部修改的sql语句,如果每次更改后就要手动记录SQL语句,太麻烦了吧,而且一般对数据库的修改都是在可视化状态下完成,没有通过写语句去更改数据库字段呢
其实我知道题主想问啥,就是平时记录嫌麻烦,问有没有不麻烦的方法。
方法我是知道的,就是找别人开发软件,你只要享受结果就好了,麻烦都是别人的。
我们都是手动升级,自己把修改的记录成脚本,升级的时候执行一下,关于脚本过多的问题,你可以一年的合并成一个脚本。当年的按照月份合并成一个脚本。记得ddl语句要先执行,所以一般是这部分单独出来。存储过程就是最简单的,反正最多全部执行一下都行。