innodb_autoinc_lock_mode メソッドの詳細な例

Y2J
リリース: 2017-05-24 13:47:36
オリジナル
2552 人が閲覧しました

次のエディタでは、MySQL innodb_autoinc_lock_mode の概要を説明します。編集者はこれがとても良いと思ったので、参考として共有します。エディターに従って見てみましょう。

innodb_autoinc_lock_mode このパラメーターは、auto_increment 列を持つテーブルにデータを挿入するときの関連するロックの動作を制御します。

【0】まず挿入を分類しましょうまず、挿入は大きく3つに分類できます


1. t(name)の値('test')への挿入などの単純な挿入


2. データのロードなどの一括挿入 | ... への選択 ....


3. t(id,name) への挿入などの混合挿入 (1,'a') ) ,(

null

,'b'),(5,'c');

[1] innodb_autoinc_lock_mode の説明innodb_auto_lockmode には 3 つの値があります:


1, 0 これは伝統を表します

2つのコヒーレンテーションを意味しますこのモードでは、すべての挿入ステートメント (「insert like」) はステートメントの先頭でテーブル レベルの auto_inc ロックを取得し、ステートメントの最後でロックを解放する必要があります。ここではステートメント レベルではなくステートメント レベルについて話していることに注意してください。トランザクション レベル。トランザクションには 1 つ以上のステートメントが含まれる場合があります。

3. 値の配布の予測可能性、継続性、再現性を保証できます。これにより、挿入ステートメントがスレーブにコピーされたときにマスターと同じ値を生成できるようになります (ステートメントのレプリケーション ベースのセキュリティが保証されます)。

4. このモードでは auto_inc ロックがステートメントの終わりまで保持されるため、同時挿入に影響します。

【1.2】consecutive(innodb_autoinc_lock_mode=1) モード:

1. このモードでは、単純挿入で一度に挿入される値の数がすぐに決まるため、 mysql は一度だけ使用できます。この挿入ステートメントに対して複数の連続した値を生成します。一般に、これはレプリケーションでも安全です (ステートメントベースのレプリケーションの安全性が保証されます)

2。このモードの利点は、ステートメントが対応する値を取得する限り、auto_inc ロックが事前に解放できることです


[1.3] interleaved(innodb_autoinc_lock_mode=2)。モード

1. このモードでは auto_inc ロックがないため、このモードのパフォーマンスは最高ですが、同じステートメントに対して取得される auto_incremant 値が異なる可能性もあります。連続的ではないこと。

【2】バイナリファイル形式が混在している場合、これらの 3 つの値のいずれもコピーセーフになります。


現在、mysql はバイナリ形式を row に設定することを推奨しているため、binlog_

for

mat がステートメントではない場合は innodb_autoinc_lock_mode=2 を使用するのが最適です。これによりパフォーマンスが向上する可能性があります。 auto_incrementsexampleに関する例で説明することで、auto_increment列の値を行いませんcolumnStep1:シーンを再現します

create table t(x int auto_increment not null primary key);
insert into t(x) values(0),(null),(3);
select * from t;
+---+
| x |
+---+
| 1 |
| 2 |
| 3 |
+---+
ログイン後にコピー

step2:問題の原因となったSQL

update t set x=4 where x=1;
select * from t;
+---+
| x |
+---+
| 2 |
| 3 |
| 4 |
+---+
ログイン後にコピー

3番目のステップ: 常に表現される形式を再現する

insert into t(x) values(0);
ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'
ログイン後にコピー

4番目のステップ: 問題の概要最初のステップを実行した後、1つのステップで、 mysql は、次の auto_increment 値が 4 であることを認識しています。

2 番目のステップを実行した後、mysql は 4 が人為的に占有されたことを認識しなかったため、3 番目のステップの実行時にエラーが発生しました。 【関連する推奨事項】

1.
Mysqlの無料ビデオチュートリアル

2. innodb_index_statsがデータをインポートする際のテーブル主キーの競合エラーの詳細な説明


3. mysqlのinnodb_autoinc_lock_modeの例の詳細な説明

4. MySQL での新しいユーザー権限の追加の詳細な例


5.

mysql での init_connect メソッドの詳細な例

以上がinnodb_autoinc_lock_mode メソッドの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート