質問編集履歴

6

コメントアウトを一部修正

2022/08/08 13:01

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -77,7 +77,7 @@
77
77
  */
78
78
 
79
79
  // 実行
80
- $with_sleep = true; // この値だけ2回目の読み込みでは false にする
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
- // 1回目の読み込みだけsleepさせる
118
+ //回目だけ 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

コメントアウトを一部削除

2022/08/08 12:59

投稿

nikuatsu
nikuatsu

スコア177

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

文章を加筆

2022/08/05 16:43

投稿

nikuatsu
nikuatsu

スコア177

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

文章の一部修正

2022/08/05 16:28

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -1,17 +1,13 @@
1
1
  ### 前提
2
2
  下記の **テーブル構造** において、「fruits_name が重複しないときだけ INSERT」をしたいと考えています。
3
3
 
4
+ ### 実現したいこと
4
- [以前の質問](https://teratail.com/questions/0avu51fjjjiuf4) で「SELECT FOR UPDATE を使ってはどう」と教えたものののソースコードらず、自分で書いたみました
5
+ この提において、下記**SELECT FOR UPDATE を使ったコード** であっいるの?間違っていれば?また懸念点があればどの部か?などアドバイスを頂きたい
5
6
 
6
- 実際に重複は防止できているのですが、これであっているのかが不安です。
7
-
8
- ### 実現したいこと
9
- 上記の提において、下記**SELECT FOR UPDATE を使ったコード** であっいるの?間違っていれば?ま懸念点があればど部分か?どアドバイスを頂きたいです。
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

コメントを加筆

2022/08/05 14:29

投稿

nikuatsu
nikuatsu

スコア177

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

「以前の質問」の文字列をハイパーリンク化

2022/08/05 14:27

投稿

nikuatsu
nikuatsu

スコア177

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