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 で複数のクラス属性を定義する場合の無効な解決策
あなたも私と同じように、コンピューターのファイルを整然と整理し、不要なファイルを適宜削除するプログラ...
由来: 数日前、テスターから写真を見るという要件が送られてきました。 この要件を見たとき、私は少し混...
MySQL 5.x と MySQL 8.0.X のいくつかの違いapplication.proper...
上はシステム時間、下はハードウェア時間です。ここでは変更を加えているので、同じくらいの速さになってい...
この記事では、参考までに、ビデオアップロード機能を実現するためのVueの具体的なコードを紹介します。...
Ubuntu に jdk をインストールする: [リンク] UbuntuにEclipseをインストー...
この記事では、カード ウォーターフォール レイアウトを実現するための CSS3 列のサンプル コード...
本来の意図このツールを作った理由は、コンピューターを使用しているときにいつでも毎日の仕事や生活を記録...
この記事は主に、PostgreSQL データベースを記述して解析を実装する SQL スクリプト関数を...
この記事では、実際に発生した問題をもとに、git の設定に関する内容を紹介します。コマンド: git...
序文名前付きスロットは、スロット内の「name」属性を使用して要素にバインドされます。知らせ: 1....
1. 親コンポーネントはpropsを通じて子コンポーネントにデータを渡すことができる2. 子コンポー...
mysql 8.0.11 winx64のインストールチュートリアルは以下のように記録され、みんなと...
高さ:100% が機能しないのはなぜですか?この知識は不人気ではありませんが、使用する際には混乱する...
目次コンストラクタ新しいオペレーター自分で新しいものを実装するコンストラクタnew を導入する前に、...