1. トランザクションとは何ですか?
トランザクションは一連のデータベース操作コマンドを含むメカニズム、操作シーケンスであり、すべてのコマンドは全体としてシステムに送信されます。
または、操作リクエストをキャンセルします。つまり、このデータベース グループがすべて実行されるか、どれも実行されません。特に、複数のユーザーが同時に操作するデータベース システムに適しています。
トランザクションは、単一の論理的な作業単位として実行される一連の操作です。
論理作業単位には 4 つの属性が必要です。
アトミック性: トランザクションは完全な操作であり、トランザクションの要素をさらに分割することはできません。すべての要素は全体としてコミットまたはロールバックする必要があります。
一貫性: トランザクションが完了したとき、データは一貫した状態にある必要があります。
分離: データを変更するとき、すべての同時トランザクションは互いに分離されます。
耐久性: トランザクションが完了した後、システムへの影響は永続的です。
2. トランザクションを作成する
トランザクションの開始: トランザクションを開始します
トランザクションのコミット: トランザクションのコミット
ロールバック (元に戻す) トランザクション: ロールバック トランザクション
コード
スタッドを使用する
行く
存在する場合(select * from sysobjects where name = 'bank')
ドロップテーブルバンク
テーブルバンクを作成する
(
customerName char(10), --顧客名
currentMoney お金 -- 残高
)
行く
-- 口座残高が 1 未満にならないというチェック制約を追加します
テーブルバンクを変更する
制約を追加 CK_currentMoney check(currentMoney >= 1)
行く
銀行値に挿入('Zhang San',1000)
銀行の値に挿入('李思',1)
* 銀行から選択
-------------------------------------------------- --------
--------------- * * * * 事* * 事* * * * -------------
-------------------------------------------------- --------
スタッドを使用する
行く
set nocount on -- 影響を受ける行番号情報を表示しません。
print 'トランザクション前のデータ:'
* 銀行から選択
行く
取引を開始する
@errorSum int を宣言します
@errorSum=0 を設定します
銀行設定を更新します currentMoney = currentMoney-1000 where customername='Zhang San'
銀行セットを更新します currentMoney = currentMoney+1000 where customername='李思'
set @errorSum = @errorSum + 1
print 'トランザクション中のデータ:'
* 銀行から選択
if @errorSum <> 0
始める
print 'トランザクションが失敗しました。トランザクションをロールバックします'
トランザクションのロールバック
終わり
それ以外
始める
print 'トランザクションは成功しました、トランザクションをコミット、ハードディスクに書き込み、永久に保存します'
トランザクションをコミットする
終わり
行く
print 'トランザクション後のデータ:'
* 銀行から選択
-------------------------------------------------- --------
--------------- * * * * 引用* * 引用* * * * -------------
-------------------------------------------------- --------
--インデックス: データを整理するための SQL Server の内部メソッドです。
--インデックスは次の 3 種類に分類できます。
--一意のインデックス: 2 つの行が同じインデックス値を持つことはできません。
--主キー インデックス: テーブルの主キーを定義するときに、一意のインデックスを自動的に作成する特殊なタイプの主キー インデックス。主キーの各値は一意である必要があります。
--クラスター化インデックス: テーブル内の行の物理的な順序は、キー値の論理 (インデックス) 順序と同じです。テーブルには 1 つのクラスター化インデックスのみを含めることができます (辞書のピンインとして理解できます)。
--非クラスター化インデックス: データとインデックスには、データが格納されている対応する場所へのポイントが含まれています。テーブル内の行の物理的な順序は、キー値の論理的な順序と一致しません。 (MAPとして理解可能)
-- クラスター化インデックスは非クラスター化インデックスよりも高速です
-- テーブル内にクラスター化インデックスは 1 つだけ存在できますが、列を主キーとして設定すると、その列はデフォルトでクラスター化インデックスになります。
-- テーブルにはインデックスがなくてもよく、主キー インデックスは必ずしもクラスター化インデックスである必要はありません。
--インデックスはどこで使われているのでしょうか?
-- この列は頻繁に検索され、データの並べ替えに使用されます。
--悪いタイプには異なる値がいくつかしかなく、テーブル内のデータ行も数行しかないため、インデックスを使用する必要はありません。
- 文法
--table_name (column_name[,column_name]...) に [ユニーク][クラスター化|非クラスター化] インデックスのインデックス名を作成します。
--[
-- fillfactor = x の場合 --fillfactor x は 0 ~ 100 の値です。
--]
コード
スタッドを使用する
行く
存在する場合 ([name]='IX_stuMarks_writingExam' の sysindexes から [name] を選択)
インデックスを削除 stuMarks.IX_stuMarks_writingExam -- インデックスが既に存在するかどうかをクエリし、存在する場合は削除します。
stuMarks(writeExam) に非クラスター化インデックス IX_stuMarks_writeExam を作成します
with fillfactor=30 -- フィルファクタの予約スペース
行く
--クエリ
select * from stumarks (index=IX_stuMarks_writingExam)
--エラーが報告されます:「index」の近くに構文エラーがあります。テーブル ヒントの一部とする場合は、次のように WITH キーワードと括弧が必要です。
select * from stumarks with(index=IX_stuMarks_writingExam)
select * from stumarks with(index=IX_stuMarks_writingExam) where writingExam は 60 ~ 90 です
-------------------------------------------------- --------
--------------- * * * * 表示* * 写真* * * * --------------
-------------------------------------------------- --------
ビュー: 仮想テーブルであり、1 つまたは複数のテーブルのデータに基づくクエリ方法です。
一般的な機能: テーブル内の行をフィルタリングし、権限のないユーザーによる機密データへのアクセスを防止し、複数の物理データ テーブルを 1 つの論理データ テーブルに抽象化します。
- 文法:
--create ビュー view_name
- として
--<選択ステートメント>
コード
スタッドを使用する
行く
存在する場合(select * from sysobjects where name='view_stuinfo_stumarks')
ドロップビュー view_stuinfo_stumarks
行く
ビューの作成 view_stuinfo_stumarks
として
名前=stuname、学生番号=stuinfo.stuno、筆記試験のスコア=writeexam、コンピュータテストのスコア=labexamを選択します。
平均スコア = (writeexam+labexam)/2 stuinfo から stuinfo.stuno で stumarks を左に結合 = stumarks.stuno
行く