CRUD 操作の基本概念
データベース開発において、CRUD は Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)の 4 つの基本操作を指す略称です。これらはデータ持久化層における最も頻繁に実行される処理であり、SQL 構文の核心を成します。
環境設定とテーブル定義
以下の例では、従業員情報を管理するためのシンプルなスキーマを用意します。主鍵は id とし、自動増分設定を適用しています。
employees テーブル
CREATE TABLE `employees` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`full_name` varchar(255) NOT NULL,
`gender` varchar(10) NOT NULL,
`age` int(11) NOT NULL,
`emp_code` varchar(20) NOT NULL COMMENT '従業員コード',
`dept_code` varchar(20) DEFAULT NULL COMMENT '部署コード',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
初期データの投入
INSERT INTO `employees` VALUES
(1, 'Tanaka', 'Male', 30, 'E001', 'D10'),
(2, 'Suzuki', 'Female', 28, 'E002', 'D10'),
(3, 'Sato', 'Male', 35, 'E003', 'D20'),
(4, 'Yamada', 'Female', 25, 'E004', 'D20');
データ作成(Insert)
新しいレコードを追加するには、主に 2 つの構文パターンが利用されます。
標準的な挿入構文
カラム名を明示し、対応する値を指定します。
INSERT INTO employees (full_name, gender, age, emp_code, dept_code)
VALUES ('Kato', 'Male', 29, 'E005', 'D30');
SET 句を用いた構文
MySQL 特有の構文で、カラムと値を直接紐付けて記述できます。
INSERT INTO employees
SET full_name = 'Ito', gender = 'Female', age = 32, emp_code = 'E006', dept_code = 'D30';
複数レコードの同時挿入
VALUES 句にカンマ区切りで複数の値セットを記述することで、一度に多くのデータを追加できます。
INSERT INTO employees (full_name, gender, age, emp_code, dept_code)
VALUES
('Watanabe', 'Male', 40, 'E007', 'D10'),
('Kimura', 'Female', 27, 'E008', 'D20');
※主鍵 id を指定しない場合、自動増分値が割り当てられます。文字列型は単引号で囲む必要があります。
データ更新(Update)
既存のレコードを変更するには UPDATE 文を使用します。特定の行のみを対象とする場合は WHERE 句が必須です。
特定行の更新
UPDATE employees
SET full_name = 'Nakamura', age = 31
WHERE id = 1;
この場合、id が 1 のレコードのみが変更され、他の行やカラムには影響しません。
全行の更新(危険性)
UPDATE employees
SET dept_code = 'D99';
WHERE 句を省略すると、テーブル内のすべてのレコードが対象となります。意図しないデータ破壊を防ぐため、条件指定には細心の注意を払ってください。
データ削除(Delete)
レコードを削除する処理です。条件付き削除とテーブル全体のクリアには異なるアプローチがあります。
条件付き削除
DELETE FROM employees
WHERE id = 5;
テーブルのクリアと削除
- DELETE FROM 表名:レコードを行単位で削除します。トリガーが発火し、トランザクションログに記録されます。
- TRUNCATE TABLE 表名:テーブルを高速に空にします。構造は維持され、自動増分カウンタもリセットされます。
- DROP TABLE 表名:テーブル構造ごと完全に削除します。元に戻すことはできません。
データ読み取り(Select)
データの検索は SQL で最も頻繁に使用される操作です。
全データの取得
SELECT * FROM employees;
主鍵による検索
SELECT * FROM employees
WHERE id = 2;
複雑な検索条件や結合查詢については、より高度な SELECT 構文を学ぶ必要があります。