在生产中更改数据库而不会丢失数据

时间:2014-09-04 15:08:52

标签: php mysql google-app-engine google-cloud-sql

我有一个网络应用程序,允许人们管理数据库中的一组用户和课程。使用Web应用程序为每个订阅者复制此数据库结构,并使用其数据填充它。例如:

Subscriber 1 DB
  user table
    userID, name, age, etc 
  lesson table
    lessonID, start, end, location, etc

Subscriber 2 DB
  user table
    userID, name, age, etc 
  lesson table
    lessonID, start, end, location, etc

将来,当添加新功能时,我当然必须对这些数据库进行更改。我如何在所有数据库上更新数据库结构?

我知道如何添加额外的列:

ALTER TABLE user ADD COLUMN address VARCHAR DEFAULT 0;

但如何将其应用于所有数据库?有没有办法在MYSQL工作台中执行此操作?

此应用使用PHP,Google App Engine和Cloud SQL。感谢您的任何意见!

1 个答案:

答案 0 :(得分:0)

您可以很好地计算您拥有的用户数,然后在每个数据库上运行for()循环并更新必要的表。不确定这在专业发展方面有多高效或犹豫不决,但对我来说这样做是有意义的:

function UpdateDatabase($db_name) {
// connect to database here
// run query (queries) to update the database here
}

for($user = number_of_users; $user = 1; $user++) {
UpdateDatabase("Subscriber_" . $user);
}

当然,这段代码假设你用数字编号。无论您编号还是列出所有用户,这个想法都是一样的。 for循环将执行以下操作:

  • 获取用户#id
  • 更新数据库" Subscriber_id"

因此,当它循环时,它将从id为1的用户开始,一直到最后。