データベースの4つの特性

3114 ワード

1、データベースの四大特性
原子性:トランザクションに含まれるすべての操作がすべて成功するか、すべて失敗してロールバックされます.実装:ログ、すべての更新操作をすべてログに書き込む.もしいくつかのシステムが潰れ/断電するなどの原因で事務中の一部の更新操作がすでに実行され、一部の操作が実行されていない場合、ログを遡ることによって、操作をロールバックし、システムに原子性と一致性を保証させる.
コンシステンシ:同時トランザクションがいつでも少なくても、システムは一貫性を保つ必要があります.
独立性:複数の同時トランザクションの操作で、同じ時間に1つのトランザクションしか実行できません(およびシリアルの実行).
永続性:トランザクションが正しく実行されると、トランザクション内のデータに対する操作はロールバックされません.
2、データベースの四大特性の関係?
データベースの4つの特性はすべて一致性を核心とし、データベースの外部一致性とデータベースの内部一致性に分けられ、その中の外部一致性は符号化によって保証される(および同じトランザクション内で操作の完全性を保証し、問題があればデータベースが解決できない)、内部一致性とトランザクション中の操作は一致性を保証しなければならない:つまりすべて実行するか、すべて実行しないか、トランザクションが実行された後、一貫性を永続的に保存します(単一のトランザクションの場合).複数のトランザクションが同時に行われる場合、原子性と持続性を保証するだけでは不十分である.例えば、同時トランザクションaと同時トランザクションbが同時に1つのデータ(同時にレコードbに100を加える)を操作し、通常の結果はbが+200と記録されるが、aトランザクションがこのデータを操作すると、bトランザクションもこのレコード+100として実行され、aトランザクションが実行された後、bレコードの値は+100のみとなり、aトランザクションはbトランザクションの結果を上書きすると更新が失われるため、同時状態での一貫性を保証するために分離性を導入した.すなわち、各トランザクションが見たデータが一致し、複数のトランザクションが同時実行された状態が実行前の状態と等価であることを保証する.
3、データベースが独立性をしないことによる問題?
ダーティリード:トランザクションAはトランザクションBがコミットしていないデータを読み出し、トランザクションBが正しく実行されていない場合、ロールバックすると、トランザクションAが読み出すのはダーティデータである.
ダーティリード解決:リードがコミットされた---ロックの位置を変更し、ロックの本来の位置は操作が完了すれば解放され、現在はトランザクションの実行が完了した後に解放される.
繰り返し不可:1つのトランザクション範囲内の2つの同じクエリーが異なる結果を得た(クエリー時に他のトランザクションがコミットされたため).
更新が失われました:
(1)更新が失われた:2つのトランザクションが同時に更新され、2番目のトランザクションがロールバックして最初の更新の結果を上書きする.
(2)2回の更新:2つのトランザクションは同時に同じデータを更新し、1つ目のトランザクションは新しいことに成功し、2つ目の更新は失敗した.1つ目は2つ目のトランザクションと新しい結果を上書きしたからである.
幻読み:同じトランザクションの同じ2回のクエリの結果が一致しません(レコード数の場合).
4、幻読と再読不可の違いは?
幻読針は記録の個数に対して、記録の内容に対して繰り返してはならない.
5、隔離性の分類?
未読/汚読/ReadUncommitted:および未提出のデータを読み取り、同じデータに対して、1つのトランザクションが書き込まれる場合、他のトランザクションの書き込みは禁止されますが、読み取り可能なデータベースで変更された未提出のデータ;更新の紛失の問題を解決するためです.
コミット/再読み取り不可/ReadCommitted:およびコミットされたデータのみを読み込むことができます.同じデータに対して、1つのトランザクションが書き込まれた場合、他のトランザクションの読み書きは禁止されます(コミットされていないデータを指します).更新の紛失、汚れた読み取りの問題を解決するために.
繰り返し可能/RepeatableRead:同じデータに対して、1つのトランザクションの書き込み時に他のトランザクションの読み取りを禁止し、1つのトランザクションの読み取りは他のトランザクションの書き込みを禁止する.繰り返し読み取り、汚い読み取り、更新が失われない問題を解決する.
シーケンス化リード:トランザクションのシーケンス化実行が要求され、トランザクションは同時実行できず、1つ1つしか実行できません.1つのトランザクションが書き込まれると、他のトランザクションの読み書きが禁止され、1つのトランザクションが読み書きされると、他のトランザクションの読み書きが禁止されます.(表レベルロックおよび行レベルロック)は、繰り返し読み取り不可、汚れ読み、更新喪失、幻読みなどの問題を解決した.
6、どのように隔離性を実現しますか?
2つのタイプのロック、楽観ロック、悲観ロック.
悲観的なロック:現在の物事はすべての操作に関連するオブジェクトをすべてロックし、操作が終わった後に他のオブジェクトに解放して使用します.
楽観ロック:異なるトランザクションは、統一データの異なる履歴バージョンを見ることができます.2つのトランザクションが同時に同じデータを変更した場合、遅いトランザクションのコミット時に競合検出が行われます.
楽観的なロックの実現方式:1、ログの方式;2、メモリに同じデータの複数の履歴バージョンを保存し、タイムスタンプで区別する.
7、隔離性の設定方法
(1)mysqlを配置する.iniファイル
      1   # :READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
      2 [mysqld]
      3 transaction-isolation = REPEATABLE-READ

(2)useデータベース名;
     (3)select @@tx_isolation;//設定に成功したかどうかを確認し、一般的な設定が完了したらmysqlのサービスを再起動する必要があります.
8、SQL言語分類;
DQL:データ検索言語SELECT FROM WHERE構成;
DML:データ操作言語UPDATE INSERT DELET構成;
DDL:データベースの各種オブジェクトテーブル、ビュー、インデックス、同義語、クラスタリングなどを定義するデータ定義言語.
DCL:データ制御言語で、データベースにアクセスする特権を付与または回収し、データベースがトランザクションを操作する発生時間と効果を制御し、データベースを監視する.