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