ストアドルーチンとは何ですか?
ストアド ルーチンは、データベース チュートリアル サーバーに保存され、クエリで指定された名前を呼び出すことによって実行される一連の SQL ステートメントです
これらの SQL ステートメント コマンドを実行します。
ストアド プロシージャを使用する理由
アプリケーションには 2 種類あり、1 つは Web ベースで、もう 1 つはデスクトップ ベースであることは誰もが知っています
互いに協力してデータアクセスを完了します。これら 2 つを含むアプリケーションがあり、そのうちの 1 つを変更したいとします
クエリ SQL ステートメント。アプリケーションが非常に大きい場合、対応するクエリ SQL ステートメントを同時に変更する必要がある場合があります
この問題は、大規模で複雑で保守が難しい場合に発生します。さらに、SQL クエリステートメントを Web プログラムまたはデスクトップに配置します
SQLインジェクションによるダメージを受けやすい。ストアド ルーチンは、これらの問題の解決に役立ちます。
ストアドプロシージャ、ストアドルーチン、ストアドファンクションの違い
Mysql ストアド ルーチンには、実際にはストアド プロシージャとストアド関数が含まれており、これらを総称してストアド ルーチンと呼びます。
このうち、ストアドプロセスは主に、レコードの取得、レコードの挿入、レコードの更新、またはレコードの削除で完了します。つまり、選択の完了
挿入、削除、更新などの作業。ストレージ関数はクエリ作業を完了し、入力パラメータを受け入れて
を返すだけです。結果。
ストアドプロシージャとストアド関数を作成する
プロシージャストアドプロシージャ名(パラメータ)の作成
ストアドプロシージャ本体
関数ストアの関数名(パラメータ)を作成します
ストア関数本体
データベース omcmc にテーブル db_info があると仮定します。テーブル構造は次のとおりです。
FOREIGN_KEY_CHECKS=0 を設定;上記の表を使用して、単純なストアド プロシージャを作成します----------------------------
----------------------------
-- db_news のテーブル構造
----------------------------
`db_news` が存在する場合はテーブルを削除します;
テーブル「db_news」を作成します (
`id` int(10) NOT NULL auto_increment,
`title` varchar(200) NOT NULL,
`editor` varchar(20) デフォルト NULL,
`origin` varchar(20) デフォルト NULL,
`tags` varchar(200) デフォルト NULL,
`content` テキストが NULL ではありません、
`hits` int(10) デフォルト '0',
`ip` varchar(15) NOT NULL,
`time` int(10) NOT NULL,
主キー (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
-- 記録
の詳細。 。 ', '100', '127.0.0.1', '1215051225');
----------------------------
INSERT INTO `db_news` VALUES ('1'、最初のアプリ'、'xqbar.com'、'xqbar.com'、'omcmc'、
)
プロシージャ select_news() を作成します
タイトルを選択、db_news からのヒット;
上のスクリーンショットから、ストアド プロシージャを呼び出す方法がわかります
ストアド プロシージャ name() を呼び出す;
、必要なのは、必要な結果データを返すためにストアド プロシージャにパラメータを渡すことができることです。保存について詳しくは以下をご覧ください
保存されたプロセスのパラメータ。
ストアドプロシージャのパラメータ
通常、ストアド プロシージャはユーザー パラメーターを受け入れ、呼び出し元のユーザーに結果を返します。
mysql チュートリアルでは、ストアド プロシージャのパラメータについて、各パラメータがそのパラメータ名、データ型、およびパラメータを宣言する必要があると規定しています
入力パラメーターは情報を返すために引き続き使用されます。ストアド関数の php チュートリアルでは、入力パラメーターのみがサポートされます。
その中には:
IN: パラメーターの入力に使用されます
OUT: パラメーターを返すために使用されます
INOUT: パラメーター値をストアド プロシージャに渡すために使用され、値が変更された場合に返されます
さらに、OUT および INOUT として宣言されたパラメーターについては、ストアド プロシージャを呼び出すときに、パラメーターが確実に正しくなるようにパラメーター名の前に @ を追加する必要があると規定されています。
番号はプロシージャの外で呼び出されます。 次に、情報番号をストアド プロシージャ select_news に渡して返すように上記のストアド プロシージャを変更します。
確認のため、該当する情報のタイトルにご返信ください。
プロシージャが存在する場合は削除 select_news;
プロシージャ select_news(IN id int,OUT title varchar(200)) を作成します
db_news.id=id;の db_news から db_news.title を選択しますターミナルを実行して呼び出します
select_news(1,@title) を呼び出します;
通話形式に注意してくださいこのうち、1は渡したい情報番号、titleは対応する返される情報番号です。OUTになっているので再度呼び出します
num に 100 を選択します;
。
の場合は、前に@を付けて手続き外で呼び出します。 (以下の例を参照)
getNum;
が存在する場合はプロシージャを削除します プロシージャgetNum(OUT num int)を作成します
getNum(@num);を呼び出します
@num を選択してください;
スクリーンショット:
PHPストアドルーチンとストアドプロシージャの高度な学習パート2
ではなく null なのか疑問に思う人もいるかもしれません。
前の記事から引き続き、戻り値を指定して前の例を呼び出す場合、次のメソッドを使用してストアド プロシージャを呼び出すことができます:
@return パラメータを選択;
このメソッドを使用して、上で作成した select_news を呼び出します。見てみましょう
なぜ返されるタイトルが call select_news(1,@title) のようなデータベース番号に対応するデータは First App です。これは、ストアド プロシージャ本体が title パラメーター return を返さないためです。
戻り値。ストレージ機能を見てみましょう
引き続き db_news テーブルを例として取り上げますが、ストアド ルーチンに関する他の知識をこのストレージ関数に追加します
今回お話しする学習オブジェクトを紹介しましょう。
drop 関数が存在する場合 count_news;区切り文字 //
create 関数 count_news(hits int) は int を返します
コメント「受信クリック数に基づいて、この数を超えるメッセージの数をカウントします」
始まります
total_news int を宣言します;
Hist_num int デフォルト 0 を宣言します;
ヒット>=0 の場合
set hits_num=hits;
select count(db_news.hits> hits_num; それ以外
total_news=0 を設定します;
終了したら
total_news を返す;
終わり;
//
区切り文字 ;
上記ストアドファンクションでは、ストアドルーチン変数の宣言、値の設定、判定文、ストアドファンクションの特徴を利用しました
一部の戻り値の型とストアドルーチンの記述方法(コメント)ストアド プロシージャの戻りパラメータとは異なり、ストアド関数を定義するときにどの変数が戻りパラメータであるかを直接宣言する必要はありませんが、
return パラメータのデータ型を宣言するには、return パラメータを関数本体で return を使用して返します。
データ変数の形式で表されます。注意する必要があるのは:ストアド関数は入力パラメーターのみをサポートし、入力パラメーターの前に IN または INOUT はありません。
上記のストレージ関数に戻り、コードの意味を説明しましょう:
ストアド関数 count_news が存在する場合は、ストアド プロシージャと同様に、次のステートメントを使用できます
存在する場合はドロップ関数 count_news;。
区切り文字 //
ストアド プロシージャまたは関数を削除する
ドロップ プロシージャ|関数 [存在する場合] ストアド プロシージャ名|ストアド関数名区切り文字を使用して、mysql のデフォルトのセミコロン (;) の使用を変更し、新しい終了記号を使用して現在のステートメントを終了します。
ストアド関数のパラメータには入力パラメータのみがあり、返す前に IN または INOUT を宣言する必要がないことに注意してください。返されるデータ クラスを宣言するだけです
を使用します。
デリミタの後の元のデフォルトのセミコロン (;) ステートメント終了記号は、ステートメント終了記号が復元されるまで機能しなくなります。
create 関数 count_news(hits int) は int を返します。
コメントを使用して、ストアド プロシージャまたはストアド ファンクションの機能情報を記述します。フォーマットコメント「説明文字列」を使用してください
タイプ
コメント「受信クリック数に基づいて、この数を超えるメッセージの数をカウントします」begin を使用して処理モジュールを制限します
'
始まりますtotal_news int を宣言します;
変数の宣言形式 変数名のデータ型を宣言 [default デフォルト値]
Hist_num int デフォルト 0 を宣言します;
変数の宣言形式 変数名のデータ型を宣言 [default デフォルト値]
ヒット>=0 の場合
set hits_num=hits;
setを使用して変数に値を代入します
select count(id) into total_news from db_news where db_news.hits>hits_num;
SQL ステートメントを使用して変数に値を割り当てることができます
それ以外
total_news=0 を設定します;
終了したら
上記は判定文です。形式は if-else-end if または if –else if-else-end if であることに注意してください
セミコロン(;)に注意してください
total_news を返す;
ストアド関数によって返される値を返すには、return を使用します。値は 1 つだけであることに注意してください。
終わり;
//
区切り文字 ;
上記の概念的な知識を要約すると:
1. ストアド関数とストアド プロシージャのパラメータの違いは何ですか。
2. ストアドルーチンでの mysql のデフォルトの終了記号を変更する方法。
3.ストアドルーチンへの機能情報の記述方法。
4. 変数を宣言して設定します。
5. begin-end ステートメントブロック。
6. 条件判定 if-else if-else-end if or if-else-end if or if-end if