MySQLストアドファンクションでテーブルに値を挿入する方法
MySQLの関数(ファンクション)は、本来「結果を返すこと」を目的として使用するのが最適です。そのため、テーブルへの値の挿入(INSERT)や更新(UPDATE)のようなデータ操作を行うストアドファンクションを作成する場合、その動作はストアドプロシージャとほぼ同じようになります。
ストアドファンクションでテーブルに値を挿入する例
以下の例では、student_marks(学生の点数)テーブルに値を挿入するための、tbl_insert という名前のストアドファンクションを作成しています。引数として学生名と4科目の点数を受け取り、テーブルにレコードを追加した後に 1 を返します。
mysql> Create Function tbl_insert(S_name Varchar(50),M1 INT,M2 INT,M3 INT,M4 INT) -> RETURNS INT -> DETERMINISTIC -> BEGIN -> INSERT INTO student_marks values(S_name,M1,M2,M3,M4); -> RETURN 1; -> END// Query OK, 0 rows affected (0.00 sec)
ファンクションの呼び出しと結果確認
作成したファンクションをSELECT文で呼び出すと、指定した値がテーブルに挿入され、戻り値として 1 が返されます。
mysql> Select tbl_insert('Saurabh',85,79,65,71);
+------------------------------+
| tbl_insert('RR',58,25,65,32) |
+------------------------------+
| 1 |
+------------------------------+
1 row in set (0.07 sec)その後、テーブルの中身を確認すると、新しい行が正しく追加されていることがわかります。
mysql> Select * from student_marks; +---------+------+---------+---------+---------+ | Name | Math | English | Science | History | +---------+------+---------+---------+---------+ | Raman | 95 | 89 | 85 | 81 | | Rahul | 90 | 87 | 86 | 81 | | Mohit | 90 | NULL | 86 | 81 | | Saurabh | 85 | 79 | 65 | 71 | +---------+------+---------+---------+---------+ 4 rows in set (0.00 sec)
ポイントのまとめ
- RETURNS INT: ファンクションは必ず何らかの値を返す必要があるため、ここでは挿入成功を示す整数型の戻り値を定義しています。
- DETERMINISTIC: 同じ入力に対して常に同じ結果を返すことを宣言する句で、バイナリログを有効にしている環境ではこの宣言が必要になる場合があります。
- 実行方法: ストアドプロシージャと同様に
CALL文ではなく、SELECT文の中で通常の関数のように呼び出せるのが特徴です。
このように、ストアドファンクションを使えば、値の挿入処理をSQL文の一部として簡潔に組み込むことができます。ただし、単純なデータ操作だけが目的であれば、ストアドプロシージャの方が適しているケースも多い点には注意しましょう。
-
MySQLの関数からテーブル(結果セット)を返す方法|ストアドプロシージャの使い方
MySQL関数ではテーブルを返せない結論から言うと、MySQLの関数(FUNCTION)からテーブルや結果セットを返すことはできません。MySQLの関数が返せるのは、文字列、整数、CHAR型などのスカラー値に限られます。テーブル形式のデータ(複数行・複数列の結果セット)を返したい場合は、関数ではなくストアドプロシージャ(Stored Procedure)を使用しましょう。この記事では、実際にサンプルテーブルを作成し、ストアドプロシージャで結果セットを取得する手順を解説します。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql> creat
-
MySQLでテーブルからランダムな値を3件表示する方法
MySQLのテーブルからランダムな値を取得したい場合は、RAND()関数を使用します。取得する件数はLIMIT句で指定します。今回は3件を取得する例を見ていきましょう。select yourColumnName from yourTableName order by rand() limit 3;それでは、実際にサンプルテーブルを作成しながら手順を確認していきます。1. サンプルテーブルの作成まず、create table文でテーブルを作成します。mysql> create table DemoTable646 ( Id int NOT N