MySQLのビュー_ _トリガトランザクション機能_ _ _動的ストアドプロシージャ抗SQLインジェクション

1、ビュー

  初出:

    SQLステートメントは、(例えばID> 10 t1からID、名前を選択する)名前を表示するようにビューを作成します。

  レビュー:

    SQL文とビュービュー名を変更します。

  削除:

    ビュー名は、ビューをドロップします。

2、トリガー:

  テーブルは、操作の感覚(CRUD)、トリガカスタム動作を行いますとき

  ターミネータを変更するdemiliter //#//

  トリガー・アクションを挿入しないトリガーという名前の学生テーブルの各行#t1のために学生に挿入する前に、ティガーさt1を作成する場合    

  ベギン                        

  loggin挿入(L-NAME)値(new.sname)

  loggin挿入(L-NAME)値(new.sname)

  終わり

 

  挿入、更新操作は通常のみ生成NEW、新しいデータ、

  OLDは、古いデータは通常、生成されたときに削除操作

 

3、機能

  パイソン 

    デフF1(A1、A2):

      + A2 A1復帰

  F1()

  組み込み関数

    機能選択CURDATE()の実行。

    ブログ

    IDタイトルのctime

    2019から11空自1

    2019から11空自2

    2019から10空自3

    2019から10空自4

    CTIMEを選択し、CTIMEにより、ログ・グループから(1)を数えます。

    DATE_FORMAT(CTIME、 "%Y-%M")によってブログ群からDATE_FORMAT(CTIME、 "%Y-%mを")を選択します。

    2019から11 2

    2019から10 2 

  カスタム関数(戻り値)

  

  区切り文字//

    (関数を作成

    I1 int型、

    i2のint型

    )

    ベギン

    num個のint型のデフォルトの0をdelcare。

    NUM = I1 + I2を設定します。

    (かどうか)を返します。

    終わり

  区切り文字;

  

  (1100)F1を選択します。

 

4、ストアドプロシージャ

  いくつかすでに書かれたSQL文のエイリアス==「保存のMySQL

  コール:エイリアスを();

  SQL文を書くためにプログラマーの代わりに使用

 

  この方法の一つ:

    MySQLの:ストアドプロシージャ

    プログラム:ストアドプロシージャを呼び出します

 

  1、簡単な

    区切り文字//

    プロシージャP1を作成します()

    ベギン

    先生から選択*;

    学生へのinser(SNAME)鑑定人( 'CT');

     終わり //

    区切り文字;

 

    コールP1();#MySQLの呼び出し

    cursor.callproc(P1 '')#パイソンコール

  2、(IN、OUT、INOUT)パラメーターを渡します

    区切り文字//

    (プロシージャP2を作成します

      N1 int型で、

      n2はint型で

    )

    ベギン

    先生から*を選択する場所TID> N1;

    終わり //

    区切り文字;

    コールP1(12,2);#MySQLの呼び出し

    cursor.callproc( 'P2'、(12,2))#のPythonのpymysqlコール

 

    3、outパラメータ 

    区切り文字//

    (プロシージャP3を作成します

    N1 int型で、

    n2はint型アウト

    )

    ベギン

      123123 = N2を設定します。

      学生から*を選択する場所SID> N2;

    終わり //

    区切り文字;

 

    @ v1のことで、間接変数のリターンを達成するために#MySQLのコールへの影響

    セットする@ V1 = 12;

    コールP3(12、@ v1の)

    V1 @選択;#p3のコールを呼び出し、それらに変数を@Vした後、その後、@v実際にはN2、123123を再割り当てするために12から@v設定。

 

    #Pymysqlは、ストアドプロシージャ、次の文の実装でデフォルトのmysqlを呼び出します。

    @ _p3_0 = 12を設定します。

    @ _p3_1 = 2を設定します。

    コールP3(@_ P3_0、@ _ P3_1)

    、_p3_0 @ @ _ P3_1を選択します。

 

    cursor.callproc( 'P3'、(12,2))

    R1 = cursor.fetchal()

    印刷(R1)

    

    cursor.execute( '@の_p3_0を選択し、@ _ P3_1')

    R2 = cursor.fatchall()

    印刷(R2)

    

    戻り値が必要である理由を設定した結果を偽造します

    区切り文字//

    (プロシージャP3を作成します

    N1 int型でから、

      格納された識別子1を識別するためのアウトN2 INT手順の結果は、1,2-エラー誤差は通常2であります

 

    )

    ベギン

      (..)VVに挿入

      (..)VVに挿入

      (..)VVに挿入

    終わり //

    区切り文字;

 

    4、トランザクション

    区切り文字//

    (手続きP4を作成します

      Sataus int型アウト 

 

    )

    ベギン

      図1に示すように、文が異常な場合に実行されます{

      セット状態= 1。

      ロールバック;

      }

    

    トランザクションを開始

      --- Aアカウントマイナス100元

      --- Bのアカウントは80元を増加しました

      --- Cアカウントは20元を増加しました 

      ---コミット;

    終了

    setStatus = 2。

    終わり //

    区切り文字;

    ----------------------------------------------

    例#総務

    demiliter //

    (PROCEDURE P5を作成

      OUT p_return_codeのTINYINT

    )

    befin

      sqlexecptionの終了Hadler博士を宣言

      ベギン

      --- ERROR

      セットp_return_code = 1。

      ロールバック;

    終わり;

 

    トランザクションを開始。

      TB1から削除します。

      TB2にinser(名)の値( 'veven');

    コミット;

 

    - - 成功

    セットp_return_code = 2。

 

    終わり //

    区切り文字;

    ----------------------------------------

     

    5、カーソル

      区切り文字//

      手続きP6を作成します()

      ベギン

      ROW_ID int型を宣言; - 変数1

      ROW_NUM int型を宣言; - 変数2

      行わint型のDEFAULT FALSEを宣言。

      一時int型を宣言する。

 

      Aから選択ID、NUMためmy_cursorカーソルを宣言する。

      = TRUE行っていないセットのためcontinuehandlerを宣言。

       

      オープンmy_cursor:

        BBJ:LOOP

          my_cursor INTI ROW_ID、ROW_NUMをフェッチします。

        行われていれば

          BBJを残します。

        場合終了 

        設定温度= ROW_ID + ROW_NUM

        Bに挿入(数)の値(温度)

      エンドループBBJ。

      近くmy_cursor;

    終わり //

    区切り文字;

 

    6、動的SQL(抗SQLインジェクション)の実装

    区切り文字//

    (手続きP7を作成

      TPL VARCHAR中(255)

      引数はintで

    )

    ベギン

      1、プリフライト車の何かSQL文の正当性
      2、SQL = TP1フォーマット

      3、SQL文の実行

 

      @xo =引数を設定します。

      FROM XXXをPREPARE 'どこSID>学生から選択*?';

      XXXは@xo使用して実行;#@変数にのみ使用することができます

      DEALLOCATEはPRODを準備します。

    終わり //

    区切り文字;

おすすめ

転載: www.cnblogs.com/222kd/p/10882215.html