Mysql は 5.0 からストアド プロシージャをサポートしています。平たく言えば、ストアド プロシージャはカプセル化された SQL ですが、SQL だけではなく、通常、変数、条件判断、ループ本体、カーソルなども含まれます。
ストアド プロシージャの役割
多くのシナリオでは、必要な新しいデータを生成するために複数のテーブルのデータを処理する必要があります。これら複数のテーブルのデータは、接続などの問い合わせ方法では与えることができず、判定とループによってのみ生成することができます。現時点では、ストアド プロシージャを使用してこれを実現できます。
さらに、ストアド プロシージャには、パフォーマンスの向上やネットワーク リクエストの削減などの利点もあります。ストアド プロシージャを使用せずに実装する場合、PHP を使用して実装する場合は、MySQL を複数回呼び出して複数のリクエストを生成する必要があります。
もちろん、このストアド プロシージャには欠点がないわけではなく、比較的デバッグされており、クラスタリングはサポートされていません。
ストアド プロシージャの作成
ストアド プロシージャを作成するための構文は次のとおりです。
CREATE PROCEDURE 过程名(参数) BEGIN 过程体 END
パラメータに関しては、パラメータを設定するための構文は
[IN|OUT|INOUT] パラメータ名のタイプ
IN は、変数がプロシージャ本体内でのみ使用できることを示します
OUT は、変数 Variables がプロセスの外部でのみ使用できることを示します。
INOUT は、変数がプロセスの内部と外部で使用できることを示します
次に、最も単純なストアド プロシージャを作成しましょう。
CREATE PROCEDURE p1(IN x INT) BEGIN SELECT x; END;
変数
MySQL の変数は、グローバル変数とローカル変数に分類されます。
グローバル変数は @ で始まり、宣言する必要はありません。直接使用できます。たとえば、
SET @name='gwx';
のようにローカル変数を最初に宣言する必要があります。ローカル変数の初期化方法は次のとおりです。次のように:
DECLARE x int DEFAULT 0;
に従ってみましょう 保存されたプロセスを完了するには、距離に応じて運賃を計算します。3 キロメートル以内の距離は 6 元として計算され、それを超える距離は 1 キロメートルあたり 1.2 元として計算されます。 ##
-- distance 路程 CREATE PROCEDURE p1(in distance FLOAT) BEGIN DECLARE d_money FLOAT DEFAULT 0; IF distance>3 THEN SET d_money=6+(distance-3)*1.2; ELSE SET d_money=6; END IF; SELECT d_money; END;
Cursor
PHP と比較すると、カーソルは foreach に似ており、ループするたびに 1 つのレコードを取得します。 カーソルの定義:declare 游标名 CURSOR FOR SELECT 语句
FETCH 游标名 INTO 变量名
CREATE TABLE IF NOT EXISTS test_cursor( num1 INT(10) UNSIGNED NOT NULL DEFAULT 0, num2 INT(10) UNSIGNED NOT NULL DEFAULT 0 ); INSERT INTO test_cursor(num1,num2) VALUES(1,1),(2,2),(3,3); CREATE PROCEDURE `test_cursor`() BEGIN DECLARE sum INT(10) DEFAULT 0; DECLARE n1,n2 INT(10); DECLARE done INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT num1,num2 FROM test_cursor; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; OPEN cur; -- 打开游标 WHILE done=0 DO FETCH cur INTO n1,n2; IF done=0 THEN -- 注意这里为什么加IF条件,不加的话,最后一个值会被多加一遍 SET sum=sum+n1+n2; END IF; END WHILE; CLOSE cur; -- 关闭游标 SELECT sum; END
以上がMysql 変数、カーソル、ストアド プロシージャの適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。