0

私は4つの列(id、name、surname、tel)を持つテーブルを持っています
.idは主キー
名、姓とtelは一意です。

ここで、行を挿入する必要があります。その name-surname-tel を持つ行が既に存在する場合は、ID を取得して返します。それ以外の場合は、通常どおり挿入します。

私は2つの戦略で考えました:
1)挿入する前に選択を行い、何も見つからない場合は挿入し、そうでなければIDを取ります
2)エラーコード1(一意の制約違反)が発生した場合は挿入を試みます

どちらの方がよいですか?または、phpでできる別の戦略はありますか?

4

1 に答える 1

2

あなたは正しいです、それらは最良の選択肢です。パフォーマンスの点での違いは、あるとしてもごくわずかです。

最初のものを実行した場合でも、2 番目のものも実装する必要があります。最初のSELECTリクエストと 2 番目INSERTのステートメントの間に、単一のトランザクションで行わない限り、別のプロセスがデータベースを変更した可能性があるためです。

単一のクエリで挿入/チェックを行うステートメントに変えることもできSELECT INTOますが、それでもSELECTID を取得するために少し時間がかかります。

結論として、エラーを挿入してチェックする2番目のオプションを選択します。

于 2013-01-03T14:01:51.000 に答える