データベースの更新

データベースの更新 -- 新たなスキーマによるデータベースの更新

データベースの更新

スキーマファイルに手を加えた際に MDB2_Schema でデータベースを更新するのは、とても簡単なことです。 現在のデータベーススキーマを取得するために getDefinitionFromDatabase() メソッドを用い、次に updateDatabase() で更新を行います。 しかし、実際に実行する前に getDefinitionFromDatabase() が期待通りの結果を返していることを確認することを忘れないでください。 詳細な情報は、それぞれ対応する章を参照ください。

<?php
require_once 'MDB2/Schema.php';

$options = array(
    'log_line_break' => '<br>',
    'idxname_format' => '%s',
    'debug' => true,
    'quote_identifier' => true,
    'force_defaults' => false,
    'portability' => false
);
$dsn = 'mysql://root:@localhost/MDB2Example';

$schema =& MDB2_Schema::factory($dsn, $options);

if (PEAR::isError($schema)) {
    $error = $schema->getMessage();
} else {
    // 最初はクエリを無効にして実行し、すべてがうまくいくようにします
    $disable_query = true;

    $previous_schema = $schema->getDefinitionFromDatabase();
    $op = $schema->updateDatabase('schema.xml', $previous_schema, array(), $disable_query);

    if (PEAR::isError($op)) {
        $error = $op->getMessage();
    }
}

if (isset($error)) {
    var_dump($error);
}

$schema->disconnect();
?>

このメソッドの最初のふたつのパラメータには、 ファイル名あるいは定義配列のどちらの形式でも指定することができます。 両方の形式を混ぜて使用する例を、上のコードで示しています。 何か問題が発生したときのために、現在のスキーマを dumpDatabase() でバックアップしておくといいでしょう。

データベーススキーマを更新する際には、 データの永続性に関する問題が出てきます。 これはデータを操作する際に影響を及ぼします。 この問題については、後日このマニュアルで説明します。