MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでテーブルの値を更新するストアドプロシージャの作成方法

MySQLでは、INパラメータを持つストアドプロシージャを作成することで、テーブル内の値を柔軟かつ効率的に更新できます。本記事では、具体的なサンプルを使いながら、ストアドプロシージャによるデータ更新の手順をわかりやすく解説します。

サンプルテーブルの準備

まず、以下のような「student_info」テーブルを例として使用します。

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Jaipur     | Literature |
| 110  | Rahul   | Chandigarh | History    |
| 125  | Raman   | Bangalore  | Computers  |
+------+---------+------------+------------+
4 rows in set (0.01 sec)

ストアドプロシージャの作成

次に、「update_studentinfo」という名前のストアドプロシージャを作成します。このプロシージャは、対象となる学生のID(p_id)と新しい住所(p_address)をINパラメータとして受け取り、該当するレコードの住所情報を更新する仕組みです。

mysql> DELIMITER // ;
mysql> Create Procedure Update_studentinfo ( IN p_id INT, IN p_address varchar(20))
    -> BEGIN
    -> UPDATE student_info
    -> SET
    -> address = p_address WHERE id = p_id;
    -> END //
Query OK, 0 rows affected (0.13 sec)

DELIMITERコマンドの役割

ストアドプロシージャ作成時にDELIMITERコマンドで区切り文字を「//」へ変更している点に注目してください。これは、プロシージャ本体に含まれるセミコロン(;)が、通常のSQL文の終端として誤って解釈されるのを防ぐためです。プロシージャの作成が完了したら、DELIMITERを元の「;」に戻すことを忘れないようにしましょう。

ストアドプロシージャの実行

プロシージャを作成したら、CALL文を使って呼び出します。更新したい値を引数として渡すだけで、テーブルの内容を更新できます。

mysql> Delimiter ; //
mysql> CALL Update_studentinfo(125, 'Shimla');
Query OK, 1 row affected (0.14 sec)

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Jaipur     | Literature |
| 110  | Rahul   | Chandigarh | History    |
| 125  | Raman   | Shimla     | Computers  |
+------+---------+------------+------------+
4 rows in set (0.00 sec)

実行結果の確認

上記の結果セットを見ると、id = 125 のレコード(Ramanさん)の住所が「Bangalore」から「Shimla」に正しく更新されていることが確認できます。

このようにストアドプロシージャを活用すれば、更新処理をひとまとめにして再利用できるため、アプリケーション側のコードもシンプルになります。複数のテーブルに対して同様の更新処理を繰り返し行う場合などに、特に効果を発揮します。

  1. MySQLで特定の3つの値しか格納できないカラムを持つテーブルを作成する方法

    MySQLで、あらかじめ決められた3つの値だけを格納できるカラムを持つテーブルを作成したい場合は、ENUMデータ型を使用します。ENUM型を使うと、指定した候補値以外のデータが挿入されるのを防ぐことができます。テーブルの作成まず、ENUM型のカラムを持つテーブルを作成しましょう。ここでは例として、「RED」「GREEN」「BLUE」の3色のみを許可するColorカラムを定義します。mysql> create table DemoTable838(Color ENUM(RED,GREEN,BLUE)); Query OK, 0 rows affected (0.67 sec)これで、Col

  2. MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法

    MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法 ストアドプロシージャの中でSHOW CREATE TABLEを実行したい場合は、動的SQL(プリペアドステートメント)を利用します。SHOW系のコマンドはプロシージャ内に直接記述できないため、SQL文を文字列として組み立てて実行するのがポイントです。 まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable2011 -> ( -> StudentId int NOT NULL AUTO_INCREMENT, -> St