MySQLストレージ・プロシージャの基本的な使い方
3358 ワード
外部プログラムがデータベースにアクセスする場合(PHPなど)、多くのSQL文を整理します.
特にビジネスロジックが複雑な場合、大量のSQLと条件がPHPコードに混ざっていて、ぞっとします.MySQLストレージ・プロシージャが導入され、ビジネス・ロジックはストレージ・プロシージャをカプセル化し、メンテナンスが容易になるだけでなく、実行効率も向上します.
一、MySQLストレージプロセスの作成
pr_addは、intタイプの入力パラメータ「a」、「b」の2つのパラメータの和を返す簡単なMySQLストレージ・プロシージャです.
2つの数の和を計算する
二、MySQLストレージプロセスの呼び出し
MySQLストアド・プロシージャを実行します.ストアド・プロシージャ・パラメータはMySQLユーザー変数です.
三、MySQLストレージプロセスの特徴
MySQLストアド・プロシージャを作成する簡単な構文は、次のとおりです.
MySQLストアド・プロシージャ・パラメータ「in」、「out」、「inout」を明示的に指定しない場合、デフォルトは「in」です.習慣的に、inのパラメータについては、明示的に指定しません.
1.MySQLストアド・プロシージャの名前の後にある「()」は必須で、パラメータが1つもなくても「()」が必要です.
2.MySQLはプロシージャパラメータを格納し、パラメータ名の前に「@a int」などの「@」を付けることはできません.次の作成ストアド・プロシージャ構文はMySQLでは正しくありません(SQL Serverでは正しい).MySQLストレージ中の変数は、変数名の前に「@」を付ける必要はありません.MySQLクライアントのユーザー変数には「@」を付ける必要がありますが.
3.MySQLストアド・プロシージャのパラメータはデフォルト値を指定できません.
4.MySQLストレージ・プロシージャは、procedure bodyの前に「as」を追加する必要はありません.SQL Serverストレージ・プロシージャには、「as」キーを付ける必要があります.
5.MySQLストレージに複数のMySQL文が含まれている場合は、begin endキーが必要です.
6.MySQLストレージ中の各文の末尾には、セミコロン";"
7.MySQLストレージ中のコメント.
8.MySQLストレージで「return」キーを使用できません.
9.MySQLストアド・プロシージャを呼び出す場合は、プロシージャ名の後に「()」を付ける必要があります.パラメータが1つもなくても「()」を付ける必要があります.
10.MySQLストアド・プロシージャ・パラメータにデフォルト値がないため、MySQLストアド・プロシージャを呼び出す際にパラメータを省略することはできません.nullで代用できます.
特にビジネスロジックが複雑な場合、大量のSQLと条件がPHPコードに混ざっていて、ぞっとします.MySQLストレージ・プロシージャが導入され、ビジネス・ロジックはストレージ・プロシージャをカプセル化し、メンテナンスが容易になるだけでなく、実行効率も向上します.
一、MySQLストレージプロセスの作成
pr_addは、intタイプの入力パラメータ「a」、「b」の2つのパラメータの和を返す簡単なMySQLストレージ・プロシージャです.
drop procedure if exists pr_add;
2つの数の和を計算する
create procedure pr_add
(
a int,
b int
)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as sum;
/*
return c;
MySQL 。return 。
*/
end;
二、MySQLストレージプロセスの呼び出し
call pr_add(10, 20);
MySQLストアド・プロシージャを実行します.ストアド・プロシージャ・パラメータはMySQLユーザー変数です.
set @a = 10;
set @b = 20;
call pr_add(@a, @b);
三、MySQLストレージプロセスの特徴
MySQLストアド・プロシージャを作成する簡単な構文は、次のとおりです.
create procedure ()
(
[in|out|inout] datatype
)
begin
MySQL ;
end;
MySQLストアド・プロシージャ・パラメータ「in」、「out」、「inout」を明示的に指定しない場合、デフォルトは「in」です.習慣的に、inのパラメータについては、明示的に指定しません.
1.MySQLストアド・プロシージャの名前の後にある「()」は必須で、パラメータが1つもなくても「()」が必要です.
2.MySQLはプロシージャパラメータを格納し、パラメータ名の前に「@a int」などの「@」を付けることはできません.次の作成ストアド・プロシージャ構文はMySQLでは正しくありません(SQL Serverでは正しい).MySQLストレージ中の変数は、変数名の前に「@」を付ける必要はありません.MySQLクライアントのユーザー変数には「@」を付ける必要がありますが.
create procedure pr_add
(
@a int, --
b int --
)
3.MySQLストアド・プロシージャのパラメータはデフォルト値を指定できません.
4.MySQLストレージ・プロシージャは、procedure bodyの前に「as」を追加する必要はありません.SQL Serverストレージ・プロシージャには、「as」キーを付ける必要があります.
create procedure pr_add
(
a int,
b int
)
as -- ,MySQL "as"
begin
mysql statement ...;
end;
5.MySQLストレージに複数のMySQL文が含まれている場合は、begin endキーが必要です.
create procedure pr_add
(
a int,
b int
)
begin
mysql statement 1 ...;
mysql statement 2 ...;
end;
6.MySQLストレージ中の各文の末尾には、セミコロン";"
...
declare c int;
if a is null then
set a = 0;
end if;
...
end;
7.MySQLストレージ中のコメント.
/*
MySQL 。
*/
declare c int; -- MySQL ( -- )
if a is null then # MySQL
set a = 0;
end if;
...
end;
8.MySQLストレージで「return」キーを使用できません.
set c = a + b;
select c as sum;
/*
return c; -- MySQL 。return 。
*/
end;
9.MySQLストアド・プロシージャを呼び出す場合は、プロシージャ名の後に「()」を付ける必要があります.パラメータが1つもなくても「()」を付ける必要があります.
call pr_no_param();
10.MySQLストアド・プロシージャ・パラメータにデフォルト値がないため、MySQLストアド・プロシージャを呼び出す際にパラメータを省略することはできません.nullで代用できます.