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を準備します。
終わり //
区切り文字;