Mysqlストレージプロセスの実戦
17573 ワード
Mysqlストレージプロセスの実戦
1.実戦事例1
1.1背景
teacherテーブルがあり、テーブル文は次のとおりです.
挿入データの値は次のとおりです.
1.2次のようなニーズがある
ストレージ・プロシージャ
mysqlコマンドラインで次のコマンドを実行します. 01.ストレージ・プロシージャを呼び出すにはcallキーワード を使用する必要があります. 02.出力パラメータは@タップ でなければなりません.
2.実戦事例2
2.1コード
2.2実行結果
3.まとめ
ストアド・プロシージャの利点: 01.ストアド・プロシージャと関数は、データベースで定義されたSQL文のセットであり、定義されたSQL文を実行するためにこれらのストアド・プロシージャと関数を直接呼び出します.ストレージ・プロシージャと関数は、開発者が同じSQL文を繰り返し記述することを回避します. 02.ストレージ・プロシージャと関数は、MySQLサーバに格納および実行され、クライアントとサーバのデータ転送を削減します. 03.ストレージ・プロシージャは、ストレージ関数と同様に、SQL文とプロシージャ文からなるコード・クリップであり、アプリケーションや他のSQL文によって呼び出されます.特徴: 記憶関数は、記憶関数自体が出力パラメータであるため、出力パラメータを持つことができない.ストレージ・プロシージャは、出力パラメータを持つことができます. ストレージ関数は、call文を使用することなく、ストレージ関数を直接呼び出すことができる.ストレージ・プロシージャの呼び出しにはcall文が必要です. ストレージ関数にはreturn文が含まれている必要がありますが、ストレージ中に含まれてはいけません.
1.実戦事例1
1.1背景
teacherテーブルがあり、テーブル文は次のとおりです.
create table teacher
(id int(4) primary key not null unique auto_increment,
num int(10) not null unique,
name varchar(20) not null,
sex varchar(4) not null,
birthday datetime ,
address varchar(50));
挿入データの値は次のとおりです.
insert into teacher values
(1,1001,'Spark','m','1984-11-08',' '),
(2,1002,'Hadoop','w','1994-11-28',' '),
(3,1003,'Hive','m','1978-12-08',' '),
(4,1004,'HBase','w','1990-01-08',' ');
1.2次のようなニーズがある
ストレージ・プロシージャ
teacher_info
を作成します.要求:teacher_infoには3つのパラメータがあります.入力パラメータはteacher_id
およびtype
であり、出力パラメータはinfo
である.ストレージ・プロシージャは、番号teacher_id
に基づいてteacher
テーブルのレコードを問い合わせる役割を果たす.type
が1である場合、名前は出力パラメータinfoに渡される.typeの値が2の場合、年齢を出力パラメータinfoに渡す.type値が他の値の場合、文字列Errorが返されます.ストレージ・プロシージャは次のとおりです.delimiter //
create procedure teacher_info(in teacher_id int,in type int,out info varchar(20))
begin
case type
when 1 then
select name into info from teacher where id = teacher_id;
when 2 then
select year(now())-year(birthday) into info from teacher where id = teacher_id;
else
select 'error' into info;
end case;
end //
delimiter ;
show create procedure;
mysqlコマンドラインで次のコマンドを実行します.
mysql> delimiter //
mysql> create procedure teacher_info(in teacher_id int,in type int,out info varchar(20))
-> begin
-> case type
-> when 1 then
-> select name into info from teacher where id = teacher_id;
-> when 2 then
-> select year(now())-year(birthday) into info from teacher where id = teacher_id;
-> else
-> select 'error' into info;
-> end case;
-> end //
Query OK, 0 rows affected (0.07 sec)
mysql> delimiter ;
mysql> call teacher_info(2,1,@info);
Query OK, 1 row affected (0.04 sec)
mysql> select @info;
+--------+
| @info |
+--------+
| Hadoop |
+--------+
1 row in set (0.00 sec)
2.実戦事例2
2.1コード
DROP PROCEDURE IF EXISTS text;
delimiter //
create procedure text( out rtn int )
begin
declare LoginId INT default 0; #mysql DECLARE
set rtn=1;
IF LoginId = 3
THEN set rtn=2;
ELSEIF LoginId = 0
THEN set rtn=3;
ELSE set rtn=4;
END IF;
end //
delimiter ;
2.2実行結果
mysql> call text(@rtn); #
Query OK, 0 rows affected (0.00 sec)
mysql> select @rtn; #
+------+
| @rtn |
+------+
| 3 |
+------+
1 row in set (0.01 sec)
3.まとめ
ストアド・プロシージャの利点: