MySQL テーブル構造定義とデータ操作の基本構文

テーブルの作成とデータ型

データベースにおいてテーブルを新規作成するには、CREATE TABLE 文を使用します。列の定義と同時に、制約条件や文字コードを指定することが可能です。

CREATE TABLE employees (
    emp_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    full_name VARCHAR(50) NOT NULL,
    department VARCHAR(30) DEFAULT 'General',
    hire_date DATE NOT NULL
) DEFAULT CHARSET=utf8mb4;

主な列制約には以下のようなものがあります。

  • AUTO_INCREMENT: 値を自動的に増分させます。
  • PRIMARY KEY: 主鍵索引を設定し、重複を許しません。
  • NOT NULL: NULL 値の代入を禁止します。
  • DEFAULT: 値が指定されていない場合の初期値を設定します。

主要なデータ型

用途に応じて適切なデータ型を選択する必要があります。

  • 数値型: TINYINT, INT, BIGINT など。UNSIGNED を付与すると負の値を取れなくなります。
  • 浮動小数点型: FLOAT, DOUBLE は近似値、DECIMAL(M,D) は厳密な値を扱います。
  • 文字列型: CHAR は固定長、VARCHAR は可変長です。
  • 日時型: DATETIME (YYYY-MM-DD HH:MM:SS) や TIMESTAMP が一般的です。

データの登録と取得

作成したテーブルに対してデータの挿入および検索を行います。

データの挿入 (INSERT)

特定の列を指定して値を投入します。

INSERT INTO employees (full_name, department, hire_date) 
VALUES ('Tanaka', 'Sales', '2023-04-01');

-- 默认値を利用する場合
INSERT INTO employees (full_name, hire_date) 
VALUES ('Suzuki', '2023-05-15');

データの検索 (SELECT)

条件を指定してレコードを取得します。

-- 全列の取得
SELECT * FROM employees;

-- 条件付き検索
SELECT emp_id, full_name FROM employees WHERE emp_id BETWEEN 10 AND 20;

-- 重複の排除
SELECT DISTINCT department FROM employees;

-- 部分一致検索
SELECT * FROM employees WHERE full_name LIKE 'T%';

データの更新と削除

データの更新 (UPDATE)

WHERE 句で対象を絞り込み、値を変更します。

UPDATE employees 
SET department = 'Marketing', hire_date = '2023-06-01' 
WHERE emp_id = 5;

データの削除 (DELETE / TRUNCATE)

レコードを削除するには主に 2 つの方法があります。

-- 条件に一致する行を削除
DELETE FROM employees WHERE emp_id = 5;

-- テーブル内の全データを削除
TRUNCATE TABLE employees;

DELETE は行単位で削除され、AUTO_INCREMENT のカウンタはリセットされません。一方、TRUNCATE はテーブルを初期状態に戻すため処理が高速で、カウンタも 1 から再開されます。

テーブル構造の変更

既存のテーブル定義を変更するには ALTER TABLE を使用します。

  • 表名の変更: ALTER TABLE employees RENAME TO staff;
  • 列の追加: ALTER TABLE staff ADD COLUMN email VARCHAR(100);
  • 列の削除: ALTER TABLE staff DROP COLUMN email;
  • 列の変更: ALTER TABLE staff MODIFY COLUMN full_name VARCHAR(100) NOT NULL;
  • 列の名前変更: ALTER TABLE staff CHANGE COLUMN full_name name VARCHAR(100);

テーブルの削除と複製

不要になったテーブルは削除し、構造のみをコピーすることも可能です。

-- テーブルの削除
DROP TABLE staff;

-- 構造のみを複製 (データはコピーされない)
CREATE TABLE staff_backup LIKE staff;

-- 構造確認
SHOW CREATE TABLE staff;

タグ: MySQL SQL DDL DML database-schema

8月2日 13:12 投稿