0

データを挿入するために挿入ステートメントを実行していますが、日付に基づいて重複エントリをチェックしてからエントリを実行したいと考えています。

私が望むのは、今日ユーザーが入力した場合product_name='x'、「x」は一意であるため、今日は誰も製品名を入力できないということだけxです。しかし、もちろん翌日にはできます。

チェックを行うために挿入の前に選択を実行したくありません。代替手段はありますか?

4

2 に答える 2

3

どちらかを使用できます

1. Insert into... on duplicate update
2. insert.. ignore

この投稿はあなたの質問に答えます

「INSERT IGNORE」と「INSERT ... ON DUPLICATE KEY UPDATE」

于 2012-09-26T08:08:16.777 に答える
2

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 フィールドに制約を追加します。

最後に、この種の情報を質問に追加してください。これで、全員が少し時間を節約できたはずです:)

于 2012-09-26T08:07:25.153 に答える