我有一个使用本地数据库的程序。用户具有不同版本的程序,而该程序又具有更新其数据库的命令。所以现在我有一大堆代码看起来像:
TStyleManager.SystemHooks := [];
我有数百个添加或删除列,添加表,创建索引等等。有没有更有效的方法来执行此操作,例如一次验证整个架构,还是我坚持维护它? 我打算将它更改为一个字符串数组,并只运行数组中的所有字符串,但我不知道是否有更好的方法来执行此操作。
答案 0 :(得分:1)
您可以从数据库information_schema
一次查询数据库中的整个架构。因此,您可以使用一个查询验证所有列设置。您可以解析结果并检查所需的更新。 (数据库information_schema
特定于MySQL):
SELECT * FROM `information_schema`.`COLUMNS` WHERE TABLE_SCHEMA = "<your_database>"
为了将来,请轻松地在数据库中创建类似dbversion
的表格。此表将数据库版本保存为任意字符串(例如&#34; 1.1.2&#34;)以及在此数据库上执行更新时的日期。因此,您可以查询数据库的架构版本,并在必要时进行更新。
仅当所有更新成功执行时才更新此数据库。另一种方法是在更新之前插入数据集作为更新正在进行的信号量。
E.g。 version =&#34; 1.1.3更新&#34;并在更新成功后删除此添加的行并添加version =&#34; 1.1.3&#34;。
CREATE TABLE `dbversion` (
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`version` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `dbversion`
ADD PRIMARY KEY (`date`,`version`),
ADD KEY `date` (`date`);
在dbversion
中获取最新条目:
SELECT * FROM `dbversion` ORDER BY `date` DESC LIMIT 1;