MariaDBコメント構文徹底解説:SQLコードを分かりやすくする秘訣

2025-05-27

以下にMariaDBで利用できるコメント構文を説明します。

シングルラインコメント

1行だけをコメントアウトする場合に使用します。

  • -- (ダブルダッシュ) -- の後に続くその行のすべてのテキストがコメントとして扱われます。ただし、-- の直後には半角スペース(または改行などの制御文字)が必要です。これは標準SQLの構文に近く、他のSQLデータベースでもよく見られます。

    SELECT * FROM products; -- これは製品データを取得するクエリです
    

    注意点
    -- の後にスペースがないと、コメントとして認識されずにエラーになることがあります。 例: SELECT * FROM users;--コメント はエラーになる可能性があります。 正: SELECT * FROM users; -- コメント

  • # (シャープ記号) # の後に続くその行のすべてのテキストがコメントとして扱われます。

    SELECT * FROM users; # これはユーザーデータを取得するクエリです
    

マルチラインコメント

複数行にわたるコメントを記述する場合に使用します。

  • /* ... */ (スラッシュとアスタリスク) /* で始まり、*/ で終わる形式です。この開始と終了のシーケンスの間にあるすべてのテキストがコメントとして扱われます。C言語のコメント構文に似ています。
    /*
    これは複数行のコメントです。
    このブロック内のすべてのテキストは無視されます。
    */
    SELECT
        customer_id,
        customer_name
    FROM
        customers;
    
    この形式は、SQL文の一部を一時的に無効化する際にも便利です。
    SELECT * FROM orders WHERE status = 'pending' /* AND order_date < '2024-01-01' */;
    

MariaDB/MySQL固有の実行可能コメント (バージョン固有コメント)

特定のMariaDB(またはMySQL)のバージョン以上でのみ実行されるSQLコードをコメント内に含めることができます。これは、異なるデータベースバージョン間で互換性のあるSQLスクリプトを作成する際に役立ちます。

  • /*M! ... */ (MariaDB固有) MariaDB 5.3.1以降で導入されたMariaDB固有の実行可能コメントです。このコメント内のコードはMariaDBでのみ実行されます。

    /*M! INSERT INTO new_table SELECT * FROM old_table; */
    
  • /*! ... */ /*! で始まり、*/ で終わります。この形式では、! の後にバージョン番号を指定することができます。指定されたバージョン以上のMariaDB/MySQLで実行された場合のみ、コメント内のコードが実行されます。

    SELECT /*! STRAIGHT_JOIN */ col1 FROM table1, table2;
    

    この例では、STRAIGHT_JOIN はオプティマイザヒントであり、MariaDB/MySQLの特定のバージョンで有効になります。

これはプログラムコード内のコメントとは少し異なりますが、データベースオブジェクト(テーブルやカラム)の定義に説明を追加するためにコメントを使用できます。これらはデータベースのスキーマの一部として保存され、SHOW CREATE TABLE などのコマンドで確認できます。

  • テーブルへのコメント

    CREATE TABLE users (
        id INT PRIMARY KEY,
        name VARCHAR(100)
    ) COMMENT = 'アプリケーションのユーザー情報を格納するテーブル';
    

    既存のテーブルにコメントを追加・変更する場合:

    ALTER TABLE users COMMENT = '更新されたユーザーテーブルの説明';
    


MariaDBのコメント構文における一般的なエラーとトラブルシューティング

MariaDB (およびMySQL) のコメント構文は比較的シンプルですが、誤った使い方をすると予期せぬエラーや動作を引き起こすことがあります。ここでは、よくあるエラーパターンとその解決策を説明します。

シングルラインコメント (--) の後にスペースがない

エラーの原因
標準SQLの--コメントは、その後ろに少なくとも1つの空白文字(スペース、タブ、改行など)が必要です。これを忘れると、SQLパーサーがコメントとして認識せず、SQL構文エラーとして扱ってしまうことがあります。


SELECT * FROM users--これはコメントです;

この場合、--の後ろにスペースがないため、--これはコメントですがSQLの一部として解釈され、多くの場合構文エラーになります。

エラーメッセージの例
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '--これはコメントです' at line 1

解決策
--の直後にスペースを追加します。

SELECT * FROM users -- これはコメントです;

マルチラインコメント (/* ... */) の終了シーケンス忘れ

エラーの原因
/*でコメントを開始したが、対応する*/で終了し忘れた場合、その後の全てのSQLコードがコメントとして扱われてしまい、意図したクエリが実行されなくなります。


/* これはコメントの始まりです
SELECT * FROM products; -- このクエリもコメントとして扱われる
UPDATE orders SET status = 'completed'; -- このクエリもコメント

エラーメッセージの例
通常、直接的なエラーメッセージは出ませんが、期待するクエリが実行されない、またはスクリプトの途中で予期せぬ構文エラー(コメントの範囲外にあると認識された後続の構文)が発生する可能性があります。

解決策
必ず*/でコメントブロックを閉じます。

/* これはコメントの始まりと終わりです */
SELECT * FROM products; -- このクエリは実行されます

マルチラインコメントのネスト(入れ子)

エラーの原因
MariaDB (およびMySQL) のマルチラインコメント/* ... */は、ネスト(入れ子)をサポートしていません。つまり、コメントブロックの中に別のコメントブロックを記述することはできません。ネストしようとすると、最初の*/でコメントが終了し、その後のテキストが予期せずSQLコードとして扱われ、構文エラーを引き起こします。


/*
  親コメントの始まり
  /* 子コメント */ -- ここで親コメントが終わってしまう
  SELECT * FROM customers; -- この行はコメントとして扱われません!
*/

エラーメッセージの例
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT * FROM customers; */' at line 4

解決策
ネストされたコメントは避け、別の方法でコメントを記述します。例えば、シングルラインコメントを組み合わせるか、コメントの記述方法を工夫します。

/*
  親コメントの始まり
  -- 子コメント (シングルラインを使用)
  SELECT * FROM customers;
*/

または

/*
  親コメントの始まり

  子コメントとして、以下のような情報を記述します。
  SELECT * FROM customers;
*/

/*! ... */ 実行可能コメントの誤解

エラーの原因
/*! ... */構文は、MariaDB (またはMySQL) の特定のバージョンでのみ実行されるSQLコードを記述するためのものです。これを通常のコメントとして完全に無視されると誤解し、重要なSQLロジックをこの中に記述してしまうと、他のデータベースシステムや古いバージョンのMariaDB/MySQLでは実行されません。


/*!50700 ALTER TABLE users ADD COLUMN email VARCHAR(255); */

この例では、MariaDB/MySQL 5.7.00以降でemailカラムが追加されますが、それより古いバージョンではこのSQL文は実行されません。これが意図しない動作の場合、問題となります。

トラブルシューティング

  • 特定のバージョンでのみ実行したい場合は、この構文が非常に有用です。
  • バージョン固有の構文を使用する場合は、それが本当にその環境で必要なのか、またはより互換性のある代替手段がないか検討します。
  • スクリプトを異なるバージョンのMariaDB/MySQLで実行し、期待通りの動作をするか確認します。

# と -- の混同、またはスクリプト実行環境の違い

エラーの原因

  • しかし、シェルスクリプト(例:bashスクリプト)の中でSQLを実行する場合、シェル自体が#をコメントとして扱うため、SQL文の#コメントがシェルによって解釈されてしまい、MariaDBに正しく渡らないことがあります。
  • mysqlクライアントやmariadbクライアントで直接SQL文を入力する場合、#はコメントとして機能します。

例 (シェルスクリプト内)

#!/bin/bash
mysql -u user -psecret -e "SELECT * FROM my_table; # これはシェルコメントにもなる"

この場合、# これはシェルコメントにもなるはシェルによってコメントとして扱われ、MariaDBにはSELECT * FROM my_table;だけが渡される可能性があります。

トラブルシューティング

  • mysqlクライアントでファイルを読み込む場合(SOURCEコマンドやリダイレクト)は、#も問題なく機能します。
  • シェルスクリプト内でSQLを実行する場合は、--コメントまたは/* ... */マルチラインコメントを使用することをお勧めします。

テーブル/カラムコメント (COMMENT = '...') の構文エラー

エラーの原因
CREATE TABLEALTER TABLEでテーブルやカラムにコメントを付与する場合、文字列リテラルとしてコメントを指定しますが、この文字列リテラル内での引用符のエスケープを誤ると構文エラーになります。


CREATE TABLE my_table (
    id INT COMMENT 'ユーザーIDです。'これはテストです'', -- エラー
    name VARCHAR(100)
);

エラーメッセージの例
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '''これはテストです''' at line 2

解決策
コメント文字列内にシングルクォート(')を含めたい場合は、二重に重ねてエスケープします('')。

CREATE TABLE my_table (
    id INT COMMENT 'ユーザーIDです。''これはテストです''',
    name VARCHAR(100)
);

または、バッククォート(`)やダブルクォート(")を適切に使い分けます(ただし、標準的にはシングルクォートが推奨されます)。

これらの一般的なエラーパターンとトラブルシューティングの方法を理解することで、MariaDBのSQLコードにおけるコメント構文の誤用を効果的に防ぎ、より堅牢なデータベーススクリプトを作成できます。 MariaDB (MySQL互換) のコメント構文は比較的シンプルですが、それでもいくつかの一般的なエラーやトラブルシューティングのポイントがあります。

-- (ダブルダッシュ) コメントのエラー

よくあるエラー
-- コメントの後にスペースがない場合に構文エラーとなることがあります。 例: SELECT * FROM users;--コメント

エラーメッセージの例
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '--コメント' at line 1 または、コメントの後のSQL文が正しく解析されず、別の構文エラーとして表示されることもあります。

原因
MariaDB (MySQL) の -- コメントは、標準SQLのコメント構文に準じており、-- の直後に半角スペース(または改行などの空白文字)が必要です。スペースがないと、データベースは --コメント 全体を識別子や演算子の一部として解釈しようとし、結果として構文エラーになります。

トラブルシューティング

  • SQLクライアントやエディタによっては、自動的にスペースを挿入してくれるものもありますが、手書きする際は意識するようにしましょう。
  • -- の後に必ず半角スペースを入れるようにします。
    SELECT * FROM users; -- これはコメントです
    

/* ... */ (マルチラインコメント) のエラー

よくあるエラー

  • ネストされたコメント (/* ... /* ... */ ... */) が意図せず問題を引き起こす場合(通常はサポートされていますが、一部のツールや状況では予期せぬ動作をすることがあります)。
  • コメントが適切に閉じられていない(特に複数行の場合)。
  • コメントの開始シーケンス /* または終了シーケンス */ のどちらかが欠けている。

エラーメッセージの例
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT * FROM products' at line 4 (閉じられていないコメントが原因で、後続のSQL文がコメントの一部と見なされ、最終的に構文が終了しないため)

原因
/* ... */ コメントは、開始と終了のペアが一致している必要があります。どちらかが欠けていると、その後のすべてのSQLコードがコメントとして扱われたり、コメントが正しく終了しないために構文エラーが発生したりします。

トラブルシューティング

  • 複数行にわたるコメントの場合、視覚的に開始と終了のブロックを確認しやすいように、適切にインデントしたり、行頭にアスタリスクを揃えたりするなどの工夫をすると良いでしょう。
    /*
     * これは複数行のコメントの例です。
     * 各行の先頭にアスタリスクを付けることで、
     * 可読性を高めることができます。
     */
    
  • /**/ が必ずペアになっているか確認します。特に長いSQLスクリプトや、SQL文の一部をコメントアウトする際に注意が必要です。

実行可能コメント /*! ... */ や /*M! ... */ の誤用

よくあるエラー

  • バージョン指定を誤っているため、意図したMariaDB/MySQLバージョンでコードが実行されない。
  • 実行可能コメント内に、本来コメントの外に置かれるべきセミコロン(;)などのステートメント区切り文字が含まれている。

エラーメッセージの例
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT 1 ; */' at line 1 (executable comment内に;がある場合)

原因
実行可能コメントは、そのコメント内のコードを「SQLの一部」として実行しますが、完全に独立したステートメントとして扱うわけではありません。したがって、コメント内部にステートメントの区切り文字(セミコロン;)を含めることはできません。また、バージョン指定が間違っていると、そのバージョン以下のMariaDBでは単なるコメントとして扱われたり、逆に不要なバージョンで実行されてしまったりします。

トラブルシューティング

  • バージョン指定が正しいか確認します。例えば、/*!50100 SELECT ... */ はMariaDB/MySQL 5.1.0以降で実行されます。/*M! ... */ はMariaDB固有の機能であることを理解して使用します。
  • 実行可能コメント内部にはセミコロン(;)を含めないようにします。セミコロンはコメントの外に配置する必要があります。
    /*! SELECT 1 */; -- 正しい
    -- /*! SELECT 1; */ -- 誤り(コメント内でセミコロンを使うべきではない)
    

テーブルやカラムのコメントの変更に関する注意

これは構文エラーというよりも、意図しないデータ変更につながる可能性のある「落とし穴」です。

よくある問題

  • ALTER TABLE でカラムのコメントのみを変更しようとして、同時にDEFAULT値やNULL制約などの他のカラム属性を誤って変更または削除してしまう。

原因
MariaDB (MySQL) では、カラムのコメントだけを変更するための専用の ALTER COLUMN 構文がありません。代わりに ALTER TABLE ... CHANGE COLUMN を使用しますが、この構文はカラムの名前、データ型、制約、そしてコメント全てを再定義する必要があります。既存のカラムの定義を正確に把握せずに変更すると、意図しない副作用が発生する可能性があります。

  • 可能であれば、本番環境で実行する前にテスト環境で影響を確認することをお勧めします。
  • その後、確認した既存の定義を完全に含んだ上でコメント部分のみを修正し、ALTER TABLE ... CHANGE COLUMN 文を実行します。
    -- 例: 現在のカラム定義が VARCHAR(50) NULL DEFAULT '初期値' COMMENT '古いコメント' の場合
    ALTER TABLE my_table CHANGE COLUMN my_column my_column VARCHAR(50) NULL DEFAULT '初期値' COMMENT '新しいコメント';
    
  • SQLフォーマッターやIDEの活用
    高機能なSQLエディタやIDE(統合開発環境)は、構文ハイライトやエラーチェック機能を持っており、コメント構文の誤りを早期に発見するのに役立ちます。
  • 公式ドキュメントを参照する
    MariaDBのコメント構文に関する正確な情報は、MariaDB Knowledge Base (https://mariadb.com/kb/en/comment-syntax/) で常に最新のものを確認できます。
  • SQL文を単純化する
    複雑なSQL文でエラーが発生した場合、コメント部分を除外して実行してみる、またはSQL文を小さなブロックに分割してどこでエラーが発生するかを特定するなど、問題の範囲を絞り込むと良いでしょう。


シングルラインコメントの例

mydb_script.sql (SQLスクリプト内での使用例)

-- これはデータベースを作成する文です
CREATE DATABASE IF NOT EXISTS my_application_db;

USE my_application_db;

# テーブルを作成します。ユーザー情報を格納します。
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY, -- ユーザーID、自動採番
    username VARCHAR(50) NOT NULL UNIQUE, # ユーザー名、ユニーク制約
    email VARCHAR(100) NOT NULL,        -- Eメールアドレス
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 作成日時、デフォルトは現在時刻
);

-- ユーザーデータを挿入します
INSERT INTO users (username, email) VALUES
('alice', '[email protected]'),
('bob', '[email protected]'); # 2人目のユーザー

SELECT * FROM users; -- 全ユーザーを取得

解説

  • SQL文の途中や行末にもコメントを記述できます。
  • -- の後には必ず半角スペースが必要です。
  • -- (ダブルダッシュ) と # (シャープ) の両方が1行コメントとして機能します。

マルチラインコメントの例

mydb_procedure.sql (ストアドプロシージャ内での使用例)

DELIMITER //

/*
  これはユーザー管理のためのストアドプロシージャです。
  引数:
    p_username VARCHAR(50) - 新しいユーザー名
    p_email    VARCHAR(100) - 新しいEメールアドレス
  戻り値:
    なし
  作成日: 2023-10-26
  最終更新: 2024-05-25
*/
CREATE PROCEDURE AddNewUser(
    IN p_username VARCHAR(50),
    IN p_email VARCHAR(100)
)
BEGIN
    -- 既存のユーザー名をチェック
    IF EXISTS (SELECT 1 FROM users WHERE username = p_username) THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'ユーザー名は既に存在します。';
    END IF;

    /*
      ユーザーテーブルに新しいレコードを挿入します。
      セキュリティのため、パスワードはハッシュ化して保存する必要がありますが、
      この例では単純化しています。
    */
    INSERT INTO users (username, email)
    VALUES (p_username, p_email);

    SELECT 'ユーザーが正常に追加されました' AS Message;

END //

DELIMITER ;

-- プロシージャの呼び出し例
CALL AddNewUser('charlie', '[email protected]');
CALL AddNewUser('david', '[email protected]');

解説

  • 特定のコードブロックを一時的に無効化する際にも使用できます。
  • ストアドプロシージャや関数などの複雑なロジックを説明する際に非常に役立ちます。
  • /* ... */ を使用して、複数行にわたる説明やコードブロックをコメントアウトしています。

mydb_compatibility.sql (異なるバージョン間での互換性確保の例)

-- MariaDB/MySQLのバージョン互換性を考慮したSQL
-- この行はMariaDB 5.7.0以降で無視されるべきです
SELECT 1;

-- 以下のSELECT文はMariaDB/MySQL 5.6.0以降でのみ実行されます
/*!50600 SELECT 'MariaDB/MySQL 5.6.0+ is running.' AS VersionInfo; */;

-- これはMariaDB固有の最適化ヒントです
-- MariaDB 10.2.2以降で有効なSTRAIGHT_JOINを使用
SELECT /*! STRAIGHT_JOIN */ t1.id, t2.name
FROM table1 t1, table2 t2
WHERE t1.id = t2.id;

-- MariaDB 10.3.0 以降で有効なSYSTEM VERSIONINGテーブルの作成 (仮定)
/*M! CREATE TABLE IF NOT EXISTS customer_history (
    id INT PRIMARY KEY,
    name VARCHAR(100)
) WITH SYSTEM VERSIONING;
*/

-- MariaDB 10.0以降でのみ有効なALTER TABLE文(例)
/*!10000 ALTER TABLE users ADD COLUMN phone_number VARCHAR(20) DEFAULT NULL; */;

解説

  • これらのコメントは、異なるバージョンのデータベースに対応した単一のSQLスクリプトを作成する際に非常に有効です。
  • /*M! ... */ 構文はMariaDB固有の機能で、MariaDBでのみ実行されるコードを示します。MySQLでは単なるコメントとして扱われます。
  • /*! ... */ 構文は、コメント内のコードが特定のMariaDB/MySQLバージョン以上でのみ実行されるようにします。! の後に続く数字がバージョン番号(例: 50600 は5.6.0を意味)を示します。

これはコード内のコメントとは少し異なり、データベースのスキーマ定義に永続的に保存される説明です。

mydb_schema.sql (スキーマ定義の例)

CREATE DATABASE IF NOT EXISTS inventory_db;

USE inventory_db;

-- 製品情報を格納するテーブルを作成
CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '製品を一意に識別するID',
    product_name VARCHAR(255) NOT NULL COMMENT '製品の正式名称',
    category_id INT NOT NULL COMMENT '製品が属するカテゴリのID',
    price DECIMAL(10, 2) NOT NULL COMMENT '製品の販売価格',
    stock_quantity INT DEFAULT 0 COMMENT '現在の在庫数'
) COMMENT = 'ストアで販売されるすべての製品に関する情報'; -- テーブル全体のコメント

-- カテゴリ情報を格納するテーブル
CREATE TABLE categories (
    category_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'カテゴリを一意に識別するID',
    category_name VARCHAR(100) NOT NULL UNIQUE COMMENT 'カテゴリの名称'
) COMMENT = '製品カテゴリを定義するテーブル';

-- 既存のテーブルのコメントを変更する例
ALTER TABLE products COMMENT = '更新された製品情報テーブル: 最新の在庫管理システム用';

-- 既存のカラムのコメントを変更する例(注意: 他の属性も再定義が必要)
-- まず、既存のカラム定義を確認します: SHOW CREATE TABLE products;
-- 例として、stock_quantityが INT DEFAULT 0 であると仮定
ALTER TABLE products CHANGE COLUMN stock_quantity stock_quantity INT DEFAULT 0 COMMENT '倉庫内の物理的な製品在庫数';
  • データベースのドキュメンテーションや、後からスキーマを理解する際に非常に役立ちます。
  • これらのコメントはデータベースのメタデータとして保存され、SHOW CREATE TABLE <テーブル名>; コマンドで確認できます。
  • COMMENT '...' 句を CREATE TABLEALTER TABLE 文内で使用して、テーブルやカラムに説明を追加できます。


MariaDB(およびMySQL)におけるコメント構文は、コード内に説明を残すための主要な方法です。しかし、「コメント」という広義の目的を達成するために、いくつかの代替的または補完的な方法が存在します。これらは直接的なコメント構文ではありませんが、同様にコードの意図を伝えたり、データベースのメタデータを整理したりするのに役立ちます。

データベースオブジェクトの COMMENT 句

これは最も直接的な代替手段であり、既に基本的なコメント構文のセクションで触れていますが、コード中のコメントとデータベースに永続的に保存されるコメントという点で区別して考えることが重要です。


  • CREATE TABLE products (
        product_id INT PRIMARY KEY COMMENT '製品を一意に識別するID',
        product_name VARCHAR(255) NOT NULL COMMENT '製品の正式名称'
    ) COMMENT = '在庫管理システムで使用される製品情報テーブル';
    
    ALTER TABLE users COMMENT = 'アプリケーションユーザーの情報を保持します。';
    ALTER TABLE users CHANGE COLUMN email email VARCHAR(100) COMMENT 'ユーザーの連絡先Eメールアドレス';
    
  • 特徴
    • これらのコメントはSQLスクリプトを読み取るだけでなく、データベースのメタデータとして永続的に保存されます。
    • SHOW CREATE TABLE や情報スキーマのテーブル(例: information_schema.TABLES, information_schema.COLUMNS)を通じて取得できます。
    • データベースのスキーマ構造を理解する上で非常に重要であり、データベース設計のドキュメントとして機能します。
  • 目的
    テーブル、カラム、インデックス、ビュー、ストアドプロシージャ、関数、イベントなどのデータベースオブジェクト自体に説明を付与する。

ドキュメンテーションツールとコードジェネレーターの活用

現代のソフトウェア開発では、コード内のコメントだけでなく、外部のドキュメンテーションツールやコードジェネレーターが使われます。

  • 例(概念的)
    # DBML ファイルの例
    Table users {
      id int [pk]
      username varchar [not null, unique, note: 'ユーザーの一意の識別名']
      email varchar [not null]
    }
    
    このような形式で定義されたファイルは、特定のツールによって解析され、ドキュメントが生成されます。
  • 特徴
    • 例えば、SchemaSpyDBML (Database Markup Language) のようなツールは、データベーススキーマからER図や詳細なテーブル定義書を生成できます。
    • FlywayLiquibase のようなデータベースマイグレーションツールは、各マイグレーションスクリプトに説明的なファイル名や、メタデータテーブルに説明を記録できます。
    • アプリケーションフレームワークによっては、データベーススキーマを定義するコード(例: Ruby on Railsのschema.rb、Djangoのモデル定義)自体がドキュメントとして機能し、その中でプログラミング言語のコメント構文を用いて説明を記述します。
  • 目的
    SQLスクリプトやデータベーススキーマから、人間が読みやすい形式のドキュメントを自動生成する。

READMEファイルや外部ドキュメント

SQLスクリプトのセット全体や、プロジェクト全体のデータベース設計について説明する場合、SQLファイル自体のコメントでは不十分なことがあります。

  • 特徴
    • 通常、Markdown形式のREADME.mdファイルや、Confluence、Notion、SharePointなどのWiki/ドキュメンテーションシステムに記述されます。
    • 複雑なデータベース構造やビジネスロジックを背景から説明するのに適しています。
    • バージョン管理システム(Gitなど)と連携して、ドキュメントの変更履歴も追跡できます。
  • 目的
    データベーススキーマ全体、設計思想、特定のSQLスクリプトの実行順序や前提条件、技術的な意思決定などを説明する。

コメントは非常に便利ですが、コード自体がその意図を明確に伝えることが最も重要です。良い命名規則と自己説明的なSQLを書くことは、コメントの必要性を減らし、コードの品質を高めます。


  • -- 悪い例: 意味不明な命名、整形されていないSQL
    SELECT a,b FROM t1 WHERE c=1;
    
    -- 良い例: 自己説明的な命名、整形されたSQL
    SELECT
        product_name,
        unit_price
    FROM
        products
    WHERE
        category_id = (SELECT category_id FROM categories WHERE category_name = 'Electronics');
    
  • 特徴
    • 意味のあるテーブル名とカラム名
      tbl_usr よりも usersfld1 よりも username の方がはるかに分かりやすいです。
    • 適切な変数名(ストアドプロシージャ/関数内)
      _id よりも p_user_id のようにプレフィックスを付けるなど、役割を明確にする。
    • 整形されたSQL
      インデント、改行、大文字/小文字の使い分けなどにより、SQLの構造を視覚的に分かりやすくする。
    • シンプルなクエリ
      複雑なロジックは小さなビューやストアドプロシージャに分割し、それぞれが単一の明確な目的を持つようにする。
  • 目的
    コメントなしでもコードの目的や動作が理解できるようにする。