質問編集履歴
6
コメントアウトを一部修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -77,7 +77,7 @@
|
|
77
77
|
*/
|
78
78
|
|
79
79
|
// 実行
|
80
|
-
$with_sleep = true; //
|
80
|
+
$with_sleep = true; // 1回目だけ sleep させて、その最中に2回目を実行する
|
81
81
|
$fruits_name = 'フルーツ4';
|
82
82
|
$result = test_insert_on_select_for_update_ver_pdo( $fruits_name, $with_sleep );
|
83
83
|
var_dump($result);
|
@@ -115,9 +115,8 @@
|
|
115
115
|
throw new Exception("既存確認で失敗しました");
|
116
116
|
}
|
117
117
|
|
118
|
-
//
|
118
|
+
// 1回目だけ sleep させて、その最中に2回目を実行する
|
119
|
-
if ( $with_sleep )
|
119
|
+
if ( $with_sleep ) sleep(40);
|
120
|
-
sleep(40);
|
121
120
|
|
122
121
|
// なければINSERT
|
123
122
|
if ( $data === false ) {
|
5
コメントアウトを一部削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -64,16 +64,6 @@
|
|
64
64
|
こちらがあっているか不安なコードです。
|
65
65
|
```php
|
66
66
|
/*
|
67
|
-
●目的
|
68
|
-
fruits_name が重複しないときだけ INSERTすることです。
|
69
|
-
例えばAさんとBさんが同じ 'フルーツ4' を投稿しても
|
70
|
-
レコードが重複しないようにしたいです。
|
71
|
-
|
72
|
-
●概要
|
73
|
-
当ファイルを2回読み込んでも
|
74
|
-
$friuts_name が重複しないことを確認します。
|
75
|
-
この「2回の読み込み」が「AさんとBさんの投稿」のイメージです。
|
76
|
-
|
77
67
|
●処理の流れ
|
78
68
|
1回目は $with_sleep = true、2回目は false にして
|
79
69
|
1回目の読み込みでsleepしている途中に2回目の読み込みを実行し
|
4
文章を加筆
test
CHANGED
File without changes
|
test
CHANGED
@@ -7,7 +7,9 @@
|
|
7
7
|
尚、これは [以前の質問](https://teratail.com/questions/0avu51fjjjiuf4) で「SELECT FOR UPDATE を使ってはどうか」と教えて頂いたもののそのソースコードはわからず、自分で書いたものになります。
|
8
8
|
|
9
9
|
### 発生している問題
|
10
|
-
特にネットでは「SELECT FOR UPDATE はデッドロックが発生しがち」や「INSERT なのに SELECT FOR UPDATE を使う必要はない」などの
|
10
|
+
特にネットでは「➀SELECT FOR UPDATE はデッドロックが発生しがち」や「②INSERT なのに SELECT FOR UPDATE を使う必要はない」などのツッコミを拝見するのですが、その詳細はわからず、上記の前提においてどうなのかも想定できません。
|
11
|
+
|
12
|
+
尚、上記の前提について①はまったくわからず、②は「SELECT FOR UPDATE を使うことでネクストキーロックがかかり重複回避できる様子なので便利っぽい」と考えていますが…どうなのでしょうか…
|
11
13
|
|
12
14
|
### テーブル構造
|
13
15
|
```SQL
|
3
文章の一部修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,17 +1,13 @@
|
|
1
1
|
### 前提
|
2
2
|
下記の **テーブル構造** において、「fruits_name が重複しないときだけ INSERT」をしたいと考えています。
|
3
3
|
|
4
|
+
### 実現したいこと
|
4
|
-
|
5
|
+
この前提において、下記の **SELECT FOR UPDATE を使ったコード** であっているのか?間違っていればそれは何か?また懸念点があればどの部分か?などアドバイスを頂きたいです。
|
5
6
|
|
6
|
-
実際に重複は防止できているのですが、これであっているのかが不安です。
|
7
|
-
|
8
|
-
### 実現したいこと
|
9
|
-
|
7
|
+
尚、これは [以前の質問](https://teratail.com/questions/0avu51fjjjiuf4) で「SELECT FOR UPDATE を使ってはどうか」と教えて頂いたもののそのソースコードはわからず、自分で書いたものになります。
|
10
8
|
|
11
9
|
### 発生している問題
|
12
|
-
特にネットでは「SELECT FOR UPDATE はデッドロックが発生しがち」や「INSERTなのに SELECT FOR UPDATE を使う必要はない」などのご意見を拝見するのですが、その詳細はわからず、上記の前提においてどうなのかも想定できません。
|
10
|
+
特にネットでは「SELECT FOR UPDATE はデッドロックが発生しがち」や「INSERT なのに SELECT FOR UPDATE を使う必要はない」などのご意見を拝見するのですが、その詳細はわからず、上記の前提においてどうなのかも想定できません。
|
13
|
-
|
14
|
-
改めまして、上記の前提において、下記の **SELECT FOR UPDATE を使ったコード** はいかがでしょうか?
|
15
11
|
|
16
12
|
### テーブル構造
|
17
13
|
```SQL
|
2
コメントを加筆
test
CHANGED
File without changes
|
test
CHANGED
@@ -68,11 +68,14 @@
|
|
68
68
|
/*
|
69
69
|
●目的
|
70
70
|
fruits_name が重複しないときだけ INSERTすることです。
|
71
|
-
|
71
|
+
例えばAさんとBさんが同じ 'フルーツ4' を投稿しても
|
72
|
+
レコードが重複しないようにしたいです。
|
73
|
+
|
72
74
|
●概要
|
73
75
|
当ファイルを2回読み込んでも
|
74
76
|
$friuts_name が重複しないことを確認します。
|
75
|
-
|
77
|
+
この「2回の読み込み」が「AさんとBさんの投稿」のイメージです。
|
78
|
+
|
76
79
|
●処理の流れ
|
77
80
|
1回目は $with_sleep = true、2回目は false にして
|
78
81
|
1回目の読み込みでsleepしている途中に2回目の読み込みを実行し
|
1
「以前の質問」の文字列をハイパーリンク化
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
### 前提
|
2
2
|
下記の **テーブル構造** において、「fruits_name が重複しないときだけ INSERT」をしたいと考えています。
|
3
3
|
|
4
|
-
以前の質問で「SELECT FOR UPDATE を使ってはどうか」と教えて頂いたもののそのソースコードはわからず、自分で書いたみました。
|
4
|
+
[以前の質問](https://teratail.com/questions/0avu51fjjjiuf4) で「SELECT FOR UPDATE を使ってはどうか」と教えて頂いたもののそのソースコードはわからず、自分で書いたみました。
|
5
5
|
|
6
6
|
実際に重複は防止できているのですが、これであっているのかが不安です。
|
7
7
|
|