必須のDDLおよびDMLコマンド: CREATE、SELECT、UPDATE、DELETE
データベース、特にMySQLのようなリレーショナルデータベースを扱う上で、データの構造を定義し、そのデータと対話することは根本的に重要です。このプロセスは、通常、SQLコマンドの2つの主要なカテゴリ、すなわちデータ定義言語(DDL)とデータ操作言語(DML)に分けられます。DDLコマンドは、テーブルのようなデータベースオブジェクトを定義および管理するために使用され、DMLコマンドは、それらのテーブル内のレコードを挿入、取得、変更、および削除するために使用されます。
このガイドでは、最も必須のMySQL DDLおよびDMLコマンドを紹介します。データの構造を定義するためのCREATE TABLE、およびデータ自体を操作するためのINSERT、SELECT、UPDATE、DELETEです。これらのコマンドを習得することは、MySQLデータベースを効果的に管理および活用したい人にとって、重要なステップとなります。
データ定義言語(DDL):テーブルの作成
DDLコマンドは、データベースオブジェクトのスキーマと構造に関するものです。データストレージの最も基本的なDDLコマンドはCREATE TABLEで、データのブループリントを定義できます。
CREATE TABLE構文
テーブルを作成する基本的な構文は、テーブル名を指定し、その列(データ型や制約を含む)を定義することです。
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
column3 datatype constraints,
...
);
table_name: テーブルに付けたい名前です。データベース内で一意である必要があります。column_name: テーブル内の各フィールドの名前です。datatype: 列が保持するデータの種類を指定します(例:整数にはINT、可変長文字列にはVARCHAR(255)、日付にはDATE、正確な小数点数にはDECIMAL(10, 2))。constraints: データ整合性を保証するために列に適用されるルールです。一般的な制約には以下のようなものがあります。NOT NULL: 列にNULL値を含めることができないようにします。UNIQUE: 列内のすべての値が一意であることを保証します。PRIMARY KEY:NOT NULLとUNIQUEの組み合わせです。各テーブルには、各行を一意に識別するための主キーが必要です。FOREIGN KEY: 参照整合性を強制し、あるテーブルの列を別のテーブルの主キーにリンクします。DEFAULT value: 挿入中に値が指定されなかった場合に、列にデフォルト値を設定します。
CREATE TABLEの例
在庫品目に関する情報を格納するために、簡単なproductsテーブルを作成してみましょう。
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL UNIQUE,
category VARCHAR(50),
price DECIMAL(10, 2) NOT NULL,
stock_quantity INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
この例では:
* product_idは自動的にインクリメントされる整数で、主キーとして機能します。
* product_nameは必須の文字列で、一意である必要があります。
* priceは必須の小数点数です。
* stock_quantityは、指定されない場合はデフォルトで0になります。
* created_atは、行が作成されたタイムスタンプを記録します。
データ操作言語(DML):データ操作
DMLコマンドは、データベーステーブル内のレコード(行)を管理するために使用されます。これらは、日常的なデータベース操作で最も頻繁に使用されるコマンドです。
INSERTコマンド:新しいデータの追加
INSERTコマンドは、テーブルに新しいデータ行を追加するために使用されます。
INSERT構文
INSERTの使用方法にはいくつかあります。
-
すべての列に値を指定する:
sql INSERT INTO table_name VALUES (value1, value2, value3, ...);
値の順序は、テーブル定義の列の順序と一致する必要があります。 -
特定の列に値を指定する:
sql INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
これは一般的に推奨されます。読みやすく、テーブル構造が変更された場合のエラー発生率が低いためです。
INSERTの例
productsテーブルを使用します。
-- すべての列に値を挿入(product_idのAUTO_INCREMENTを想定)
INSERT INTO products (product_name, category, price, stock_quantity)
VALUES ('Laptop Pro', 'Electronics', 1200.50, 50);
-- 特定の列に値を挿入
INSERT INTO products (product_name, price)
VALUES ('Mechanical Keyboard', 75.99);
-- 複数の行を一度に挿入
INSERT INTO products (product_name, category, price, stock_quantity)
VALUES
('Ergonomic Mouse', 'Electronics', 25.00, 120),
('Desk Lamp', 'Home Goods', 45.00, 75);
SELECTコマンド:データの取得
SELECTコマンドは、データ取得の要です。さまざまな条件に基づいて、データベースにクエリを実行し、特定のデータを取得できます。
SELECT構文
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name [ASC|DESC]
LIMIT number;
column1, column2, ...: 取得したい列です。すべての列を選択するには*を使用します。FROM table_name: クエリを実行するテーブルです。WHERE condition: (オプション)指定された条件に基づいて行をフィルタリングします。条件には、比較演算子(=,!=,>,<,>=,<=)、論理演算子(AND,OR,NOT)、パターンマッチング(LIKE)が含まれる場合があります。ORDER BY column_name [ASC|DESC]: (オプション)1つ以上の列で結果セットを並べ替えます。昇順(デフォルト)はASC、降順はDESCです。LIMIT number: (オプション)返される行数を制限します。
SELECTの例
-- すべての製品のすべての列を選択
SELECT *
FROM products;
-- 製品の名前と価格のみを選択
SELECT product_name, price
FROM products;
-- 'Electronics'カテゴリの製品を選択
SELECT *
FROM products
WHERE category = 'Electronics';
-- 価格が100より大きい製品を、価格の降順で選択
SELECT product_name, price
FROM products
WHERE price > 100
ORDER BY price DESC;
-- 最も高価な上位5つの製品を選択
SELECT product_name, price
FROM products
ORDER BY price DESC
LIMIT 5;
-- 名前が'L'で始まる製品を選択
SELECT *
FROM products
WHERE product_name LIKE 'L%';
UPDATEコマンド:既存データの変更
UPDATEコマンドは、テーブル内の既存のレコードを変更することを可能にします。
UPDATE構文
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
table_name: 更新するレコードが含まれるテーブルです。SET column1 = value1, ...: 更新する列とその新しい値を指定します。WHERE condition: 重要! この句は、どの行が更新されるかを決定します。省略すると、テーブル内のすべての行が更新されます。
UPDATEの例
-- 'Laptop Pro'の価格を50ドル増やす
UPDATE products
SET price = price + 50.00
WHERE product_name = 'Laptop Pro';
-- 'Mechanical Keyboard'のカテゴリと在庫数を更新
UPDATE products
SET category = 'Accessories', stock_quantity = 100
WHERE product_name = 'Mechanical Keyboard';
-- **警告**: これはすべての製品の価格を10.00に更新します
-- UPDATE products
-- SET price = 10.00;
ヒント: 意図したレコードのみを変更することを確実にするために、更新時には常にWHERE句を使用してください。意図した行を正しくターゲットしていることを確認するために、まずSELECTステートメントでWHERE句をテストしてください。
DELETEコマンド:データの削除
DELETEコマンドは、テーブルから行を削除するために使用されます。
DELETE構文
DELETE FROM table_name
WHERE condition;
table_name: 行を削除するテーブルです。WHERE condition: 重要! この句は、削除する行を指定します。省略すると、テーブル内のすべての行が削除されます。
DELETEの例
-- 'Desk Lamp'という名前の製品を削除
DELETE FROM products
WHERE product_name = 'Desk Lamp';
-- 在庫切れのすべての製品(stock_quantityが0)を削除
DELETE FROM products
WHERE stock_quantity = 0;
-- **警告**: これは'products'テーブルからすべてのレコードを削除します!
-- DELETE FROM products;
警告: UPDATEと同様に、DELETEステートメントでWHERE句を省略すると、テーブルからすべてのデータを削除する破壊的な操作になります。細心の注意を払って使用してください。
まとめ
DDLおよびDMLコマンドの理解と効果的な使用は、データベース管理の基本です。CREATE TABLEはデータの構造を定義することを可能にし、INSERT、SELECT、UPDATE、DELETEは、そのデータを投入、クエリ、変更、および管理することを可能にします。
特にUPDATEおよびDELETEで明確なWHERE句を使用してこれらのコマンドを練習することで、MySQLデータベースでの作業の強固な基盤を築き、データの整合性と正確性を確保できます。潜在的に破壊的な操作を実行する前に、必ずデータのバックアップを取ってください。