0

さて、質問を修正して、これまでに行ったこととやりたいことも含めました。だからここに行く:

CREATE ORDER (
product_nat_id int(3) NOT NULL,
name VARCHAR(20),
PRIMARY KEY (product_nate_id)
)
INSERT INTO ORDER(product_nat_id, name) VALUES(1, 'Product 1');
INSERT INTO ORDER(product_nat_id, name) VALUES(2, 'Product 2');
INSERT INTO ORDER(product_nat_id, name) VALUES(3, 'Product 3');

CREATE TABLE INT_PRODUCT (
product_id INTEGER NOT NULL AUTO_INCREMENT,
product_nat_id INTEGER NOT NULL,
title TINYTEXT,
dateCreate TIMESTAMP CURRENT_TIMESTAMP,
CONSTRAINT INT_PRODUCT_PK PRIMARY KEY (product_id),
UNIQUE INT_PRODUCT_NK (product_nat_id));

しかし、私が望むのは、レコードが更新された値で重複キーとともに到着するたびに、それを挿入する必要があります(更新されません)が、挿入された時間の差に基づいて重複制約を避けることです。これが今意味があることを願っています。

4

2 に答える 2

0

次のことをお勧めします。

  1. 前の記録を調べます。私はあなたがそれが何であるかを知っているべきだと思います

    SELECT Count(*) FROM dim WHERE recordId = '$recordid'

  2. ステップ 1 で返されたレコードが 0 より大きい場合、「前の」レコードを無効にします。

    UPDATE dim SET datevalid = '$datevalue' where recordId = '$recordid' and status = 2

  3. チェックで返されたレコードが 0 より大きいステップ 1 に進み、挿入を行います。

    INSERT INTO dim (recordId,field1,field2,date,status) VALUES (1,'sad','123123','2013-03-26',1)

  4. ステップ 1 が false の場合は、次のように挿入します。

    INSERT INTO dim (recordId,field1,field2,date,status) VALUES (1,'sad','123123','2013-03-26',1)

statusレコードを検索し、有効か無効かを区別する必要がある場合は、追加の手段としてフィールドを追加します。日付をフィルタリングする必要はありません。その後、フィールドを使用できstatusます。また、有効なレコードと無効なレコードのセットでデータが同じ場合でも、すべてのレコードに一意の自動インクリメント キーがあります。recordIdこの場合、一意のキーは同じではありません。を割り当てるrecordIdと、システムがテーブルに一意のキーを割り当てます。status = 1は有効でstatus = 2無効です。

お役に立てれば!

于 2013-03-26T06:26:00.377 に答える
0

次のような投稿のサンプルコード:

挿入クエリの構文は次のようになります。

INSERT INTO table (primarykeycol,col1,col2) 
VALUES (1,2,3) ON DUPLICATE KEY UPDATE col1=0, col2=col2+1

primarykeycol が 1 に設定された行が既に存在する場合、このクエリは次のようになります。

UPDATE table SET col1=0, col2=col2+1 WHERE primarykeycol = 1

説明:

  1. 通常、同じ結果を得るには、UPDATE クエリを発行してから、影響を受ける行があるかどうかを確認し、影響を受けない場合は INSERT クエリを発行する必要があります。

  2. このように、1 つのステップですべてを実行できます。最初に挿入を試行し、挿入が失敗した場合は更新します。

  3. このタイプの構文が最適な状況の 1 つは、毎日のカウンターを操作する場合です。たとえば、PostID、Date、および Count 列を含むテーブルがあるとします。

  4. 毎日、その日のエントリを作成済みかどうかを確認し、作成済みの場合はカウント列を増やす必要があります。これは、1 つの INSERT … ON DUPLICATE KEY UPDATE クエリで簡単に置き換えることができます。

  5. 残念ながら、いくつかの注意事項があります。1 つは、複数の一意のインデックスがある場合、UPDATE クエリの WHERE 句に OR 条件があるかのように機能することです。

  6. これは、複数の行を更新する必要があることを意味しますが、INSERT … ON DUPLICATE KEY UPDATE は 1 つの行のみを更新します。

MySQL マニュアル: INSERT ON DUPLICATE KEY UPDATE 構文

于 2014-03-06T07:22:01.933 に答える