面接では選択式で聞かれましたが......。.for updateはテーブルをロックするか、行をロックするか?
select query文はロックを追加しませんが、select ......for updateはクエリであることに加えてロックされ、悲観的なロックとなります。
つまり、インデックス/プライマリキーを使用するかどうかによって、行ロックとテーブルロックのどちらが追加されるのでしょうか。
インデックス/プライマリーキーを使用しない場合はテーブルロック、そうでない場合は行ロックです。
バリデーション
ビルドテーブルsql
//id is the primary key
//name is a unique index
CREATE TABLE `user` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`name` VARCHAR ( 255 ) DEFAULT NULL,
`age` INT ( 11 ) DEFAULT NULL,
`code` VARCHAR ( 255 ) DEFAULT NULL,
PRIMARY KEY ( `id` ),
KEY `idx_age` ( `age` ) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 1570068 DEFAULT CHARSET = utf8
手動コミットには @@autocommit=0; を設定し、自動コミットをオフにする必要があります。0なら手動コミット、1なら自動コミットです。
例題で検証する
例1.
主キーidを条件にして問い合わせを行い、別のトランザクションを開いてデータを更新すると、更新がブロックされ、ロックが追加され、問い合わせを行うid1の行データがロックされます。
図1は最初のトランザクションを示し、トランザクションはコミットされていない
図2は2番目のトランザクションで、データを更新しようとしてブロックされたところです。
図3は2番目のトランザクションで、長い間ロックの取得に失敗し、エラーが報告されています。
例2.
id が 2 の別のデータエントリーの更新を実行するためにトランザクションを開いています。
インスタンス3(インデックス)。
開始年齢でテーブルを作成すると、ユニークなインデックスが作成されます。
例4.
通常のフィールドコードで操作する
別のトランザクションで別のデータを更新しに行き、成功すれば行をロックし、失敗すればテーブルをロックすることになります。
結果
クエリ条件がインデックス/プライマリキーを使用している場合、select ......for update は行ロックになります。
通常のフィールド(インデックス/プライマリーキーなし)であれば、select ......for updateでテーブルロックが行われます。
以上、「面接でselect ......の有無を聞かれた件」をお送りしました。...更新のためにテーブルをロックしたり、行の記事をロックするかどうか、このインタビューに導入され、より関連する更新コンテンツの選択以前の記事のスクリプトのホームを検索してくださいまたは次の関連記事を閲覧し続けるあなたは将来的に多くのスクリプトのホームをサポートすることを願っています
関連
-
MySQLにおけるorder byの使用方法の詳細
-
MySql認証ベースのvsftpd仮想ユーザー
-
MySQL インタビューの質問 - ハッシュインデックスを設定する方法
-
Mysqlのソート機能の詳細
-
MySQLデータベースで数百万件のデータを10秒間で挿入
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
[解決済み】マルチパート識別子をバインドできない
-
[解決済み] SQLエラー。ORA-01861:リテラルは、フォーマット文字列01861に一致しません。
-
SQLException。オペランドは1列でなければなりません。
-
Mysqlデータベースへのリンク時にpymysqlがConnection refusedエラーを報告する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mysqlにおけるvarcharの日付比較とソートの実装
-
Mysqlデータベースの手動および定期的なバックアップ手順
-
MySQLによる既存テーブルのパーティショニングの実装
-
MySQL XAが分散型トランザクションを実装する方法を1記事にまとめました。
-
MySQLの悲観的ロックと楽観的ロックの実装スキーム
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
mysql5.7のインストールと、無料・長期利用を目的としたNavicateの導入プロセスについて
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
Djangoマイグレーションエラー 外部キー制約を追加できない
-
MySQLでテーブルを削除します。親行が削除または更新できません: 外部キー制約に失敗しました。