ビュー: 一時テーブルを繰り返し使用する場合、将来の使用を容易にするために別名を付けることができます。その後、ビューを作成できます。別名はビューの名前になります。ビューは単なる仮想テーブルであり、そのデータは物理テーブルから動的に読み取られるため、物理テーブルを変更するとビューも変更されます。 作成する: SQLとしてビューv1を作成する たとえば、create view v1 as select * from student where sid<10 のように記述します。 作成後、MySQLターミナルを使用するとv1というテーブルが表示されます。navicateを使用すると、ビュー内にv1というビューが生成されていることがわかります。 再度使用する場合は、クエリテーブル方式を直接使用できます。例えば: v1から*を選択 変更: ビュー内のSQL文のみ変更できます ビュー名をSQLとして変更する 消去: ビューをドロップ ビュー名 トリガー: テーブルを追加、削除、変更、またはチェックする場合 (前、後、または後)、トリガーを使用して関連する動作をカスタマイズできます。 SQL文のターミネータ区切り文字を変更する 前 後 --区切り文字 // -- before または after は、操作の前または後の操作 (挿入など) を定義します -- on は、そのテーブルで操作が発生した後のトリガー操作を表します -- CREATE TRIGGER t1 BEFORE INSERT on teacher for EACH row - 始める -- Course(cname) に VALUES('Ultraman') を挿入します。 - 終わり // - デリミタ; -- teacher(tname) に VALUES('triggertest111') を挿入します -- --区切り文字 // -- 各行の学生に対して INSERT の前にトリガー t1 を作成します - 始める -- teacher(tname) に VALUES('Ultraman') を挿入します。 - 終わり // - デリミタ; -- 学生(性別、名前、クラスID)にVALUES('男','1小刚111',3)を挿入します。 -- トリガーを削除します -- トリガー t1 を削除します。 -- NEW と OLD は、一貫性を保つために新しいデータと古いデータを表します -- 区切り文字 // -- 各行の学生に挿入する前にトリガー t1 を作成します - 始める --ここで new は新しく挿入されたデータを指定し、old は通常削除に使用されます -- insert into teacher(tname) VALUES(NEW.sname); - 終わり // - デリミタ; 学生に性別、名前、クラスIDを挿入します。VALUES('男','蓝大蟹',3); ストアドプロシージャ: 本質的には、これは SQL ステートメントのコレクションであり、このコレクションにはエイリアスが付けられます。ビューとテーブルの違いは、ビューはテーブルとして扱われる SQL クエリ ステートメントであるということです。 方法: 1 msyql----プログラム呼び出し用のストアド プロシージャ 2 msyql---ストアドプロシージャを実行しないでください。プログラムはSQLを書き込みます。 3 mysql - ストアドプロシージャを実行せず、プログラムでクラスとオブジェクトを記述します(SQL文に変換されます) 作成方法:
-- ストアドプロシージャの呼び出し p2(5,2) を呼び出します<br data-filtered="filtered"><br data-filtered="filtered"><em id="__mceDel"> pymysql で cursor.callproc('p1',(5,2)) を実行します</em> -- 2 パラメータ内にパラメータあり -- 区切り文字 // -- PROCEDURE p2( を作成する -- n1 int では、 -- n2 int 内 -- ) - 始める -- sid<n1 の場合、学生から * を選択します。 -- -- 終了 //<br data-filtered="filtered"><br data-filtered="filtered"> p2(5,2) を呼び出します<br data-filtered="filtered"><br data-filtered="filtered"><em id="__mceDel"> pymysql で cursor.callproc('p1',(5,2)) を実行します</em> -- 3 outパラメータストアドプロシージャでoutをパラメータとして使用すると、変数を外部から呼び出すことができます -- ストアドプロシージャには戻り値がありません。変数を外部から呼び出す場合は、outを使用する必要があります --区切り文字 // -- PROCEDURE p3( を作成する -- n1 int では、 --出力 n2 整数 -- ) - 始める --n2=444444 を設定します。 -- sid<n1 の場合、学生から * を選択します。 -- - 終わり // -- - デリミタ; -- -- set @v1=999 は、セッション レベルで変数を作成するのと同じです -- set @v1=999; -- p3(5,@v1) を呼び出します。 -- select @v1; #変数を渡してこの変数を監視することで、ストアドプロシージャが正常に実行されたかどうかを監視できます -- pymsyql の場合 -- -- カーソル.callproc('p3',(5,2)) -- r2=カーソル.fetchall() -- 印刷(r2) -- -- ストアド プロシージャには out キーワードが含まれています。戻り値を取得する場合は、cursor.execute('select @_p3_0,@_p3_1') を使用します。 -- # このうち 'select @_p3_0,@_p3_1' は固定の書き方です select @_ストアドプロシージャ名_入力パラメータインデックス位置 -- cursor.execute('select @_p3_0,@_p3_1') -- r3=カーソル.fetchall() -- 印刷(r3) -- 結果セットがある場合、なぜ戻り値を偽造する必要があるのでしょうか? ストアド プロシージャには複数の SQL ステートメントが含まれているため、すべての SQL ステートメントが正常に実行されたかどうかを判断することはできません。out 機能は、SQL ステートメントが正常に実行されたかどうかを識別するために使用されます。 たとえば、成功が1、部分的な成功が2、失敗が3とマークされている場合 ストアド プロシージャ内のトランザクション: 取引: これをアトミック操作といいます。 DML (挿入、更新、削除) ステートメントはまとめて完了し、トランザクションは DML ステートメントにのみ関連しているか、DML のみにトランザクションがあります。 取引の特徴: 原子性 A: トランザクションは最小単位であり、分割できません。 一貫性 C: トランザクションでは、すべての DML ステートメントが実行時に成功または失敗する必要があります。 分離I: トランザクションAとトランザクションBの間には分離がある 永続性D: トランザクションの保証とトランザクション終了のサインです(メモリ内のデータはハードディスクに完全に保存されます) 取引キーワード: トランザクションを開始: トランザクションを開始 取引終了: 取引終了 トランザクションをコミットする ロールバックトランザクション 取引の基本操作 区切り文字 // プロシージャp5を作成します( n1 intでは、 出力 n2 int ) 始める 1 異常実行が発生した場合のステートメント( n2=1 を設定します。 ロールバック; ) 2 取引開始 購入者アカウント - 100 販売アカウント +100 専念 3 終了セット n2=2 終わり // 区切り文字 ; このように、n2を通じてエラーを検出し、ロールバックすることができます。以下は詳細なコード区切りです。 プロシージャp6を作成します( 出力コードTINYINT ) 始める SQLExceptionが発生した場合に次の操作を実行することを宣言します。DECLARE exit HANDLER for SQLEXCEPTION 始める - エラー コード=1を設定します。 ロールバック; 終わり; トランザクションを開始します。 tb1 から削除します。 tb2(name)values('slkdjf') に挿入します 専念; - -成功 コード=2 終わり // 区切り文字 ; ストアド プロシージャでのカーソルの使用: 区切り文字 // プロシージャ p7() を作成する 始める row_id int を宣言します。 row_num int を宣言します。 宣言完了 int DEFAULT FALSE; カーソルを宣言します。declare my_cursor cursor for select id,num from A; データがない場合、doneをTrueに設定することを宣言します 見つからない場合の継続ハンドラを宣言し、done=True を設定します。 my_cursor を開きます。カーソル xxoo を開きます。LOOP xxoo というループを開始します。 my_cursor を row_id、row_num にフェッチします。 完了したら、完了が True の場合はループを終了し、xxoo を終了します。 終了の場合; temp=row_id+row_num を設定します。 B(数値)VALUES(一時)に挿入します。 ループを終了 xxoo; ループを閉じます close my_cursor; 終わり // 区切り文字 ; 上記のコードはPythonに変換されます my_cursor の row_id、row_num の場合: ループ内にデータがあるかどうかを確認し、ない場合は中断します 壊す B(num) に値 (row_id+row_num) を挿入します SQL を動的に実行し、データベース レベルで SQL インジェクションを配置します。 区切り文字 \\ プロシージャp6を作成します( intの場合 始める 1 特定のSQL文の正当性を事前コンパイル(事前チェック)する 2 sql=format tpl+arg 3 SQLを実行する @nid=nid を設定する 'select * from student where sid>?' から prod を準備します。 @nid を使用して prod を実行します。 割り当てを解除して本番環境を準備する 終わり \\ 区切り文字 ; 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 仮想マシンでXshell5をLinuxに接続する方法と障害の解決方法
何人かのブロガーが私の記事を評価してくれたのは嬉しいです。マークと知り合ってからは、私は彼をフォロー...
1|0 背景プロジェクトの要件により、各月の履歴在庫データをアーカイブしてバックアップする必要があり...
序文:私は友人のプロジェクトのバグを修正するのを手伝ったのでこれを書きました。この関数を書くのは初め...
1. コマンドの紹介bzip2 は、ファイルの圧縮と解凍に使用されます。これは、Linux システム...
目次エラーのデモンストレーション計算により画像が変わらない場合は直接インポートするCSS変数による画...
この記事では主に、フォント読み込みの最適化に関する一般的な戦略を紹介します。内容の大部分は参考資料と...
MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例最近のプロ...
目次1. 制約の概念と分類2. 5つの制約の追加と削除2.1 制約を追加する6つの方法2.2 制約を...
目次rc.local メソッドchkconfig メソッドrc.local メソッド1 まず自動的に...
目次1. Consulクラスタをデプロイする1. 準備3. Consulクラスタを作成する4. 管理...
1. JDKをインストールする コンピュータの動作桁を確認します。 uname -ar 2017 x...
1. データベース認証ステートメントを作成する > データベース seata を作成します。 ...
7 のMicrosoft の公式 Web サイトから HTTP Rewrite モジュールをダウンロ...
MySQL UTF-8 エンコーディングMySQL は 2003 年のバージョン 4.1 から U...