我可以在不逐行执行的情况下验证mysql架构吗?

时间:2017-03-03 15:26:28

标签: c# mysql

我有一个使用本地数据库的程序。用户具有不同版本的程序,而该程序又具有更新其数据库的命令。所以现在我有一大堆代码看起来像:

TStyleManager.SystemHooks := [];

我有数百个添加或删除列,添加表,创建索引等等。有没有更有效的方法来执行此操作,例如一次验证整个架构,还是我坚持维护它? 我打算将它更改为一个字符串数组,并只运行数组中的所有字符串,但我不知道是否有更好的方法来执行此操作。

1 个答案:

答案 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;