MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでテーブル構造(データではなく)の変更を検出する方法【SHOW CREATE TABLE活用】

MySQLでテーブル構造の変更を検出するには?

データの中身(レコード)ではなく、テーブルの構造=スキーマが変更されたかどうかを調べたい場合、「SHOW CREATE TABLE」ステートメントを利用するのが最もシンプルで確実な方法です。このコマンドは、テーブルを生成するDDL(CREATE TABLE文)を現在の構造のまま出力してくれるため、変更前後の出力を比較するだけで、構造の差分を簡単に把握できます。

手順1:サンプルテーブルを作成する

まずは、動作を確認するためのテーブルを作成してみましょう。

mysql> CREATE TABLE DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName varchar(40),
    StudentAge int,
    StudentMarks int
);
Query OK, 0 rows affected (0.76 sec)

手順2:現在のテーブル構造を確認する

続いて、次のクエリを実行してテーブル構造を取得します。

mysql> SHOW CREATE TABLE DemoTable;

実行すると、以下のようにテーブルの完全な定義が出力されます。

CREATE TABLE `DemoTable` (
  `StudentId` int(11) NOT NULL AUTO_INCREMENT,
  `StudentName` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `StudentAge` int(11) DEFAULT NULL,
  `StudentMarks` int(11) DEFAULT NULL,
  PRIMARY KEY (`StudentId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

手順3:ALTER TABLEで構造を変更する

ここで、新しいカラムを追加してテーブル構造を意図的に変更してみます。

mysql> ALTER TABLE DemoTable ADD COLUMN StudentCountryName varchar(20);
Query OK, 0 rows affected (0.65 sec)
Records : 0  Duplicates : 0  Warnings : 0

手順4:変更後の構造を再確認する

もう一度同じコマンドを実行して、変更後の構造を確認しましょう。

mysql> SHOW CREATE TABLE DemoTable;

出力結果は以下のようになります。

CREATE TABLE `DemoTable` (
  `StudentId` int(11) NOT NULL AUTO_INCREMENT,
  `StudentName` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL,
  `StudentAge` int(11) DEFAULT NULL,
  `StudentMarks` int(11) DEFAULT NULL,
  `StudentCountryName` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`StudentId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

先ほどの結果と見比べてみると、新しく追加した「StudentCountryName」カラムがCREATE TABLE文に含まれていることがわかります。つまり、2つのDDLを比較(diff)することで、どこにどんな構造変更が施されたのかを正確に検出できるのです。

補足:その他のスキーマ確認方法

DDLの比較以外にも、「DESCRIBE DemoTable;」や「SHOW COLUMNS FROM DemoTable;」でカラム一覧を確認する方法や、information_schemaデータベースのCOLUMNSテーブルを照会してスキーマ情報をプログラム的にチェックする方法もあります。運用環境では、これらの出力を定期的に取得して自動比較する仕組みを作っておけば、予期しないスキーマ変更の早期発見にも役立ちます。

  1. MySQLでビューの構造を確認する方法|DESCRIBE文の使い方を解説

    MySQLにおいて、ビュー(VIEW)は仮想テーブルの一種であり、実際のテーブルを組み合わせて構成されるものです。そのため、テーブルの構造を取得するために使うクエリと同じものを、ビューに対しても使用できます。つまり、DESCRIBE文を使えば、MySQLビューの構造を簡単に確認することができます。DESCRIBE文の基本構文DESCRIBE view_name;ここで view_name には、構造を取得したいビューの名前を指定します。実行例例として、「Info」という名前のビューの構造を取得してみましょう。以下のクエリを実行します。mysql> DESCRIBE INFO; +----

  2. MySQLで単一テーブルをバックアップする方法【mysqldumpの使い方を解説】

    MySQLデータベースから特定のテーブルだけをバックアップしたい場合、標準で付属しているダンプユーティリティ「mysqldump」を使うのが最も確実で一般的な方法です。なお、古いMySQL(バージョン5.0およびそれ以前)ではBACKUP TABLEステートメントによるテーブルバックアップも可能でしたが、この構文はすでに廃止されており、現行バージョンでは利用できません。本記事では、mysqldumpを使って単一テーブルのバックアップファイル(.sql形式)を作成する具体的な手順を解説します。ステップ1:コマンドプロンプトを起動するまず、ショートカットキーでコマンドプロンプト(cmd)を開きます