まず、ストアドプロシージャ
コンセプト:ストアドプロシージャは、SQL文の具体的な機能セットを完了するためにグループであり、その本質は、データベースに格納されたコードの一部です。これは、宣言型と手続き型SQL文SQL文で構成することができます。
特徴:
- SQL言語は、機能性と柔軟性を高めることができます
- グッドカプセル化
- 高性能
- あなたは、ネットワークトラフィックを削減することができます
- データベースとデータセキュリティの整合性を確保するために、セキュリティ・メカニズムとして使用することができます
ユーザー定義のターミネータ(ELIMITER)
- ELimit $$:
- 例:MySQLのターミネータは2感嘆符に変更し、「!!」(DELIMITER !!)
CREATE PROCEDURE文を使用してストアドプロシージャを作成します: CREATE PROCEDUREにSP_NAME([proc_parameter [、...]])routine_bodyを。
proc_paramete:パラメータリストは、ストアドプロシージャを指定します
routine_body:本体部分ストアドプロシージャは、また、手順の本体と称される
[IN | OUT | INOUT] PARAM_NAMEタイプ:パラメータ名、パラメータ型
例:特定の性別などの顧客の性別でテーブルを変更することができ、顧客ID番号の顧客に与えられたテーブルの顧客を実現するために使用されるmysql_testにストアドプロシージャを作成します
ローカル変数を宣言するためにDECLAREステートメントを使用します。タイプのDECLAREのVAR_NAME [、...] [DEFAULT値]
たとえば、ローカル変数整数CIDを宣言(10)のCID INTを宣言する。
ローカル変数を宣言するためにDECLAREステートメントを使用します
- 1)のみストアドプロシージャ本体に文をBEGIN ... ENDステートメントブロック。
- 2)ストアドプロシージャの最初に宣言する必要があります。
- 3)その範囲は声明BEGIN ... ENDステートメントブロックに制限されています。
- 4)ユーザ変数とは異なります
ローカル変数とユーザー変数の違い:
- 1)ローカル変数ではありません@記号の前で宣言、そしてそれだけでそのBEGIN ... ENDステートメントブロック文を使用宣言することができます。
- あなたが宣言した場合2)変数ユーザーが同時に宣言したユーザー変数は、セッション全体に存在し、その名前の前に@記号を使用します。
ローカル変数のSETステートメントの使用: SET VAR_NAMEの= exprを[、VAR_NAME =式] ... SET CID = 910;
SELECT ... INTOステートメントを直接ローカル変数に選択した列の値を使用して
フロー制御文
- 1、条件文IF ... THEN ... ELSE文CASE文(条件THEN ELSE表現式1 2 END IF IF;)
- 2、ループLOOP文WHILEステートメントREPEATステートメント
条件式WHILE END WHILE
繰り返し表現ENDリピート
ループ式ENDループ
ITERATEステートメントのその現在のサイクルのうち
****************************カーソルCURSOR ******************** *********************
DECLARE CURSORステートメントを使用してカーソルを作成します。
カーソルを開くためにOPEN文を使用します。OPEN cursor_nameは
INTO文... FETCHを使用してデータをお読みください。
CLOSE文を使ってカーソルを閉じます: CLOSE cursor_nameは
************************ **********************使用ストアドプロシージャ
ストアドプロシージャを呼び出すために、CALLステートメントを使用します
顧客ID番号909に変更男性のお客様に「M」、データベースmysql_testでストアドプロシージャを呼び出すSp_update_sex
CALLのsp_update_sex(909、 'M')。
ストアドプロシージャの使用を削除するDROP PROCEDUREステートメント
DROP PROCEDUREの[IFがEXISTS] sp_name
第二に、メモリ機能
ストアドプロシージャと機能を格納された、SQLステートメントは、コード断片とのプロシージャ文であります
CREATE FUNCTIONステートメントを使用して保存された関数を作成します
FUNCTIONのsp_name([func_parameter [、...]])RETURNSがroutine_bodyタイプCREATE
- sp_name:保存された関数の名前を指定します。
- func_parameter:パラメータが記憶機能を指定します
- 戻り値型:宣言関数は値格納されたデータのタイプを返し、型が戻り値のデータ型を指定します
- 本体部分はまた、メモリ機能体と呼ばれ、指定されたストレージ機能をroutine_body
ストレージ機能でデータベースに作成Mysql_test、関数は、データベースが顧客ID番号が付与されていない場合、特定の顧客ID番号が顧客の性別を返し、その後、返却の必要条件に基づくことができる「クライアントではありません。」
使用mysql_testを。 デリミタは$$ CREATE FUNCTIONの fn_search(CIDのINT ) RETURNS CHAR(20 ) DETERMINISTICは、 BEGIN DECLARE SEXのCHARを(20 )。 SELECT cust_sexをINTO SEX FROM 顧客 のcust_id = CID; IF SEXはIS NULL THEN RETURN(SELECT '没有该客户'); ELSE IF SEX = 'F' THEN RETURN (SELECT '女')。 ELSE RETURN(SELECT '男'); END IF ; END IF ; END $$
保存された関数を呼び出すSELECTキーワードを使用します。 SP_NAMEを選択します([func_parameter [、...]])
:使用DROP FUNCTION文は、保存された機能削除 [存在する場合] SP_NAMEをドロップ機能を