データを挿入するプロシージャの作成
このステップでは、MySQL でテーブルにデータを挿入するストアドプロシージャを作成する方法を学びます。ストアドプロシージャは、データベース内に格納された事前コンパイル済みの SQL 文です。名前で実行できるため、パフォーマンスとセキュリティを向上させることができます。
まず、操作対象となるシンプルなテーブルを作成しましょう。ターミナルを開き、以下のコマンドを使用して MySQL サーバーに接続します。
mysql -u root -p
root パスワードの入力を求められます。パスワードを入力し、Enter キーを押します。
次に、testdb
という名前のデータベースを作成します。
CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
次に、以下の構造を持つ employees
という名前のテーブルを作成します。
CREATE TABLE IF NOT EXISTS employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
department VARCHAR(255)
);
テーブルができたので、そこにデータを挿入するストアドプロシージャを作成しましょう。ストアドプロシージャは CREATE PROCEDURE
文を使用して作成されます。新しい従業員レコードを挿入する insert_employee
という名前のプロシージャを定義します。
以下は、ストアドプロシージャの SQL コードです。
DELIMITER //
CREATE PROCEDURE insert_employee (IN employee_name VARCHAR(255), IN employee_department VARCHAR(255))
BEGIN
INSERT INTO employees (name, department) VALUES (employee_name, employee_department);
END //
DELIMITER ;
このコードを分解して説明しましょう。
DELIMITER //
: これは、文の区切り文字を ;
から //
に変更します。プロシージャ自体にセミコロンが含まれているため、MySQL に対してプロシージャ定義全体を 1 つの文として扱うように指示する必要があります。
CREATE PROCEDURE insert_employee
: これは、insert_employee
という名前のストアドプロシージャの作成を宣言します。
(IN employee_name VARCHAR(255), IN employee_department VARCHAR(255))
: これは、プロシージャの入力パラメータを定義します。employee_name
と employee_department
はパラメータの名前で、VARCHAR(255)
はそれらのデータ型です。IN
キーワードは、これらが入力パラメータであることを示します。
BEGIN ... END
: このブロックには、プロシージャが呼び出されたときに実行される SQL 文が含まれています。
INSERT INTO employees (name, department) VALUES (employee_name, employee_department);
: これは、入力パラメータとして渡された値を使用して、employees
テーブルに新しい行を挿入する SQL 文です。
DELIMITER ;
: これは、文の区切り文字を ;
に戻します。
このコードを実行するには、MySQL ターミナルに直接コピーして貼り付けることができます。
コードを実行した後、以下のコマンドを実行してプロシージャが作成されたことを確認できます。
SHOW PROCEDURE STATUS WHERE db = 'testdb' AND name = 'insert_employee';
このコマンドは、insert_employee
プロシージャに関する情報(名前、データベース、作成日など)を表示します。
これで、employees
テーブルにデータを挿入するストアドプロシージャを正常に作成しました。次のステップでは、このプロシージャを呼び出す方法を学びます。