1.同時アクセス制御実装されている同時アクセス制御テクノロジはロックに基づいています。 ロックは、テーブル レベルのロックと行レベルのロックに分けられます。MyISAM ストレージ エンジンは行レベルのロックをサポートしていませんが、InnoDB はテーブル レベルのロックと行レベルのロックをサポートしています。 ロックは読み取りロックと書き込みロックに分類されます。読み取りロックは共有ロックとも呼ばれます。読み取りロックが追加されると、他の人も読み取りが可能になります。書き込みロックは排他ロックまたは排他ロックとも呼ばれます。書き込みロックは他の読み取りおよび書き込み操作をブロックします。 ロックは暗黙的ロックと明示的ロックに分けられます。暗黙的ロックはストレージ エンジンによって管理され、明示的ロックはユーザーが手動で追加します。 ロック戦略: ロックの粒度とデータ セキュリティの間のバランス メカニズム。 明示的なロックの使用方法: LOCK TABLES tbl_name READ|WRITE MariaDB [school]> LOCK TABLES students READ; #読み取りロックを追加 MariaDB [school]> テーブルのロック解除; #ロック解除
FLUSH TABLES tb_name : 開いているテーブルを閉じます(クエリキャッシュをクリアします)。通常はバックアップの前にグローバル読み取りロックを追加します。 SELECT句[FOR UPDATE | LOCK IN SHARE MODE]はクエリ中に書き込みまたは読み取りロックを追加します。 2. 取引アトミックSQL文のセット、または独立した作業単位 1. トランザクションは ACID 原則に従います。
2. トランザクションライフサイクル明示的なトランザクション: トランザクションの開始を明確に指定する 暗黙的なトランザクション: デフォルトは暗黙的なトランザクションで、各ステートメントが実行された後に直接コミットされます。 autocommit = {OFF|ON} は自動コミットをオンまたはオフにします。「自動コミット」機能を使用する代わりに、トランザクションを明示的に要求してコミットすることをお勧めします。 トランザクションを開始します: タグを挿入: 指定されたタグにロールバックします: すべて元に戻す: トランザクションをコミットします: タグを削除: MariaDB [school]> START TRANSACTION; #トランザクションの開始を明示的に指定しますMariaDB [school]> INSERT students(StuID,Name,Age,Gender) VALUES (26,'Tom',22,'M'); #レコードを追加しますMariaDB [school]> SAVEPOINT sp26; #ラベルを挿入しますMariaDB [school]> INSERT students(StuID,Name,Age,Gender) VALUES (27,'Maria',12,'F'); #別のレコードを追加しますMariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27); #確認すると、挿入されたデータが表示されます+-------+-------+--------+---------+----------+-----------+-----------+ | 生徒ID | 名前 | 年齢 | 性別 | クラスID | 教師ID | +-------+-------+------+---------+----------+-----------+ | 26 | トム | 22 | 男性 | NULL | NULL | | 27 | マリア | 12 | F | NULL | NULL | +-------+-------+------+---------+----------+-----------+ MariaDB [school]> ROLLBACK TO sp26; #sp26 タグより前の状態に戻す MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27); #チェック、maria の情報は取り消されました+-------+------+-------+---------+----------+-----------+ | 生徒ID | 名前 | 年齢 | 性別 | クラスID | 教師ID | +-------+------+------+--------+----------+-----------+ | 26 | トム | 22 | 男性 | NULL | NULL | +-------+------+------+--------+----------+-----------+ MariaDB [school]> COMMIT; #トランザクションをコミット MariaDB [school]> SELECT * FROM students WHERE stuid IN (26,27); #最終データ+-------+------+------+---------+----------+-----------+ | 生徒ID | 名前 | 年齢 | 性別 | クラスID | 教師ID | +-------+------+------+--------+----------+-----------+ | 26 | トム | 22 | 男性 | NULL | NULL | +-------+------+------+--------+----------+-----------+ 3. トランザクション分離レベル
MVCC: トランザクションレベルに関連するマルチバージョン同時実行制御 トランザクション分離レベルを変更します。サーバー変数 tx_isolation で指定します。デフォルトは REPEATABLE-READ で、GLOBAL レベルと SESSION レベルで設定できます。
MariaDB [school]> SELECT @@tx_isolation; #デフォルトは繰り返し読み取りレベルです+-----------------+ | @@tx_isolation | +-----------------+ | 繰り返し読み取り | +-----------------+ MariaDB [学校]> tx_isolation='READ-UNCOMMITTED' を設定します。 MariaDB [school]> tx_isolation='READ-COMMITTED' を設定します。 MariaDB [school]> tx_isolation='REPEATABLE-READ' を設定します。 MariaDB [school]> tx_isolation='SERIALIZABLE' を設定します。 4. 行き詰まり2 つ以上のトランザクションが同じリソースを占有し、お互いが占有しているリソースのロックを要求すると、デッドロックが発生します。 トランザクション A がテーブル t1 の 3 行目を変更し、トランザクション B がテーブル t2 の 2 行目を変更すると、トランザクション A はテーブル t2 の 2 行目を変更するときにブロックされます。次に、トランザクション B はテーブル t1 の 3 行目を変更するときにブロックされ、デッドロックが発生します。 2 つのトランザクションが同時に互いの変更済みテーブルを変更しようとして、互いをブロックします。システムはデッドロックを検出し、デッドロックを解決するために低コストのトランザクションを自動的に犠牲にします。
プロセス リストを表示します: プロセスを終了します: これで、MySQL シリーズ 10: MySQL トランザクション分離による同時実行制御の実装に関する記事は終了です。MySQL 同時実行制御の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 これで、MySQL シリーズ 10: MySQL トランザクション分離による同時実行制御の実装に関する記事は終了です。MySQL 同時実行制御の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: HTML で複数のクラス属性を定義する場合の無効な解決策
HTMLテキスト書式タグ 標簽 描述 <b> 定義粗體文本 <em> 呈現...
display:bolck/none によるメニューバーの完成の効果 図 1:まず、完成したエフェク...
目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...
目次1. 同期の原理2. ログスタッシュ入力JDBC 3. go-mysql-elasticsear...
1. Object.create() メソッドを使用して新しいオブジェクトを作成し、既存のオブジェク...
目次1. ユニットテストはなぜ必要なのでしょうか? 2. ユニットテストの書き方3. テストツール4...
知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...
序文Linux 上で jar パッケージを実行する方法は誰もが知っています。なぜ別々に話したいのでし...
Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の...
次の図に示すように: Centos 7.0以上であれば問題ありません。現在のシステム カーネル バー...
この質問は、Nuggets のメッセージから生まれました。友人が、次のコードの高さ遷移アニメーション...
mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理...
主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...
Mac 最新バージョンの MySQL 8.0.22 パスワード回復問題の説明:昨日、突然、Macで最...
日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...