データを挿入するために挿入ステートメントを実行していますが、日付に基づいて重複エントリをチェックしてからエントリを実行したいと考えています。
私が望むのは、今日ユーザーが入力した場合product_name='x'
、「x」は一意であるため、今日は誰も製品名を入力できないということだけx
です。しかし、もちろん翌日にはできます。
チェックを行うために挿入の前に選択を実行したくありません。代替手段はありますか?
どちらかを使用できます
1. Insert into... on duplicate update
2. insert.. ignore
この投稿はあなたの質問に答えます
insert into... on duplicate update
新しい行がない場合は基本的に新しい行に入力するmysql構文を使用できます。または、新しい行によってキー制約が発生した場合は、代わりに更新に使用できます。
次のテーブルがあるとします。
MyTable
ID | Name
1 | Fluffeh
2 | Bobby
3 | Tables
ID はデータベースの主キーとして設定されます (つまり、同じ値を持つ 2 つの行を持つことはできません)。通常、次のように挿入しようとします。
insert into myTable
values (1, 'Fluffster');
ただし、ID が 1 の行が既に存在するため、これはエラーを生成します。
クエリを使用するとinsert on duplicate update
、次のようになります。
insert into myTable
values (1, 'Fluffster')
on duplicate key update Name='Fluffster';
現在は、エラーを返すのではなく、代わりに新しい名前で行を更新します。
編集:次の構文を使用して、2 つの列に一意のインデックスを追加できます。
ALTER TABLE myTable
ADD UNIQUE INDEX (ID, `name`);
これにより、上記の構文を使用して、他の行と同じ ID を持つ行を挿入できるようになりますが、名前が異なる場合に限ります。または、あなたの場合は、varchar および date フィールドに制約を追加します。
最後に、この種の情報を質問に追加してください。これで、全員が少し時間を節約できたはずです:)