面接では、select...for update がテーブルをロックするのか、それとも行をロックするのか尋ねられました。

面接では、select...for update がテーブルをロックするのか、それとも行をロックするのか尋ねられました。

select クエリ ステートメントはロックされませんが、select .......for update はクエリ機能に加えてロックされ、悲観的ロックになります。

したがって、行ロックを追加するかテーブル ロックを追加するかは、インデックス/主キーが使用されているかどうかによって決まります。

インデックス/主キーがない場合、それはテーブル ロックであり、そうでない場合は行ロックです。

確認する:

テーブルSQLの作成

//idは主キーです //nameは一意のインデックスです CREATE TABLE `user` (
	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(255) デフォルト NULL,
	`age` INT ( 11 ) デフォルト NULL,
    `code` VARCHAR(255) デフォルト NULL,
	主キー ( `id` )、
    キー `idx_age` ( `age` ) BTREE の使用 
) エンジン = INNODB AUTO_INCREMENT = 1570068 デフォルト文字セット = utf8

自動送信をオフにして、@@autocommit=0; を設定して手動送信に設定する必要があります。 0 は手動送信を表し、1 は自動送信を表します。

例の検証と組み合わせる

例1:

主キー ID をクエリの条件として使用し、別のトランザクションを開始してデータを更新します。更新はブロックされ、ロックされ、クエリ対象の ID 1 の行データがロックされます。

図1は最初のトランザクションを示しており、トランザクションはコミットされていない。

図 2 は、データの更新時にブロックされる 2 番目のトランザクションを示しています。

図 3 は、ロックを長時間取得できないためにエラーが発生する 2 番目のトランザクションを示しています。

例2:

ID 2 の別のデータを更新するためのトランザクションを開きます。

例3(インデックス):

テーブルが最初に作成されたときに、年齢に対して一意のインデックスが作成されました。

例4:

共通のフィールドコードを使用して操作する

別のトランザクションで、別のデータを更新します。更新が成功すると行がロックされ、失敗するとテーブルがロックされます。

結果:

クエリ条件でインデックスまたは主キーが使用されている場合、更新時に ..... を選択すると行ロックが実行されます。

通常のフィールド (インデックス/主キーなし) の場合は、更新に ..... を選択するとテーブルがロックされます。

これで、「select for update はテーブルまたは行をロックするかどうか」というインタビューの質問に関するこの記事は終了です。関連する select for update コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 更新とデータ整合性処理のためのMySQLトランザクション選択の説明
  • MySQL データベースのデッドロック プロセス分析 (更新を選択)
  • mysql SELECT FOR UPDATE 文の使用例

<<:  CSS で TikTok テキスト揺れエフェクトを実装する例

>>:  【HTML要素】タグテキストの詳細説明

推薦する

Web ページのエンコーディングで gbk や gb2312 ではなく utf-8 が使用されるのはなぜですか?

選択肢がある場合は、UTF-8を使用することをお勧めします。実際、Windows システム自体のプロ...

mysqldumpデータエクスポートの問題に関する詳細な議論

1. mysqldump の使用時にエラー (1064) が報告されます。これは、mysqldump...

DockerでRedashの中国語版をデプロイしてインストールする方法の詳細な説明

1. インストール手順 Linux 環境でのローカル インストールと比較すると、Docker のイン...

Tomcat マルチレイヤーコンテナの設計に関する簡単な説明

目次コンテナ階層サーブレットの検索を要求するプロセス仕組みTomcat のコンテナは Servlet...

Linux コマンド クエリ アプレットでの WePY クラウド開発の実践

みなさんこんにちは。今日は Linux コマンド クエリ アプレットでの WePY クラウド開発の実...

モバイル端末の適応により、px は自動的に rem に変換されます。

まずpostcss-pxtoremをインストールします: npm install postcss-p...

DockerはRedisをインストールし、操作用のビジュアルクライアントを導入します

1 はじめにRedis 、 ANSI C言語で開発されたKey-Valueベースの高性能NoSQLデ...

HTML のメタタグの簡単な比較

メタ タグは、ファイル情報を定義し、検索エンジンによる検索を容易にするために Web ページ ファイ...

HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 2)

上の記事で、SWFObject V1.5 の使い方の紹介は一旦終了です。これから、SWFObject...

テーブルを動的に読み込み、削除する JavaScript

この記事では、テーブルを動的に読み込み、削除するためのJavaScriptの具体的なコードを参考まで...

Dockerでudpポート番号を指定する問題を解決する

Docker はコンテナを起動するときにアクセス ポートを指定します。複数の -p オプションを使用...

CSS で高さが不明な垂直中央揃えを実装する

この記事では主に、高さが不明な垂直方向の中央揃えを CSS で実装する方法を紹介し、皆さんと共有しま...

MySQL SQL 最適化チュートリアル: IN クエリと RANGE クエリ

まず、in() クエリについて説明します。 「High Performance MySQL」では、イ...

スーパーバイザーウォッチドッグの使い方を3分で学ぶ

ソフトウェアとハ​​ードウェア環境centos7.6.1810 64ビット cat /etc/red...

Win Server 2019 サーバーの IIS 構成と Web サイトの簡単な公開

1.まずサーバーにリモート接続する2. サーバーマネージャーを開く 3役割と機能の追加 4サーバープ...