我正在开发一个网络平台来管理本地区学校的学生注册。为此,我在MySQL(5.7.19)上运行了17个数据库,其中有一个数据库是主数据库,另外16个数据库则代表学校。学校数据库(必须)具有完全相同的架构,每个数据库都包含与关联学校相对应的数据。为了避免延迟,我分开了这种方法,因为每所学校可以注册许多应用程序(平均16k),因此随着时间的推移,请求可能会越来越重。
现在,我遇到了一个严重的问题:当我更改学校数据库的架构时,我必须手动为其他学校的数据库进行维护以保持架构一致性,因为我的sql请求是独立于学校进行的。例如,如果我在database_school5的table_b中添加一个新字段,则必须在所有其余数据库的table_b上手动执行相同的操作。
我该怎么做才能有效地管理这些更改?有自动解决方案吗?是否有针对此问题的适应性DBMS?
有人告诉我PostgreSQL可以通过INHERITANCE轻松实现这一点,但这仅涉及表,除非我没有做一些拙劣的研究。
我希望每次对数据库架构进行更改时,无论是添加表,添加字段,删除字段,添加约束等,这些更改都将自动转移到其他数据库。
谢谢。
答案 0 :(得分:0)
SELECT ... FROM information_schema.tables
WHERE schema_name LIKE 'database_school%'
AND table_name != 'the 17th table'
AND schema_name != 'database_school5' -- since they have already done it.
将找到16个名称。您在...
中放入的是CONCAT(...)
,用于构造ALTER TABLE ...
语句。
然后您执行以下操作之一:
计划A:手动将这些ALTERs
复制/粘贴到mysql命令行工具中以执行它们。
计划B:将所有内容包装在一个存储过程中,该存储过程将遍历SELECT
的结果,并准备并执行每一个。