0

次のようなMySQLクエリを実行したいと思います。


if((value1 != dbPrimaryValue1) OR (value2 != dbPrimaryValue2))
      INSERT ROW
else
      DO NOTHING

例を試してみましょう:


CREATE TABLE `tmp` (
    `one` int NOT NULL,
    `two` int NOT NULL,
    `three` int NOT NULL);

ALTER TABLE `tmp`
ADD PRIMARY KEY (`one`, `two`);

INSERT INTO `tmp`
    (`one`, `two`, `three`)
    VALUES (1,2,3);

INSERT INTO `tmp`
    (`one`,`two`,`three`) 
    VALUES (10,20,30),
           (1,999,999),
       (999,2,999),
       (1,2,999)
    ON DUPLICATE KEY 
           UPDATE `one` = `one`; // or some dummy no-source-drain operation

結果はここにあります:


select * from tmp;
+-----+-----+-------+
| one | two | three |
+-----+-----+-------+
|   1 |   2 |     3 |
|  10 |  20 |    30 |
|   1 | 999 |   999 |
| 999 |   2 |   999 |
+-----+-----+-------+

Uは次のような結果を望んでいます:


 select * from tmp;
+-----+-----+-------+
| one | two | three |
+-----+-----+-------+
|   1 |   2 |     3 |
|  10 |  20 |    30 |
+-----+-----+-------+

このクエリを実行することは可能ですか?私は膨大なデータを操作していて、 ロード->比較->保存のような手順は不可能です。ありがとう!

4

2 に答える 2

1

両方のフィールドを個別に一意にするだけです。例えば:

CREATE TABLE `tmp` (
    `one` int NOT NULL UNIQUE,
    `two` int NOT NULL UNIQUE,
    `three` int NOT NULL);

または、次の方法で制約を追加します。

ALTER TABLE `tmp` ADD UNIQUE (`one`);
ALTER TABLE `tmp` ADD UNIQUE (`two`);
于 2011-03-24T09:22:51.847 に答える
0

キー制約を作成するUNIQUEと、データベースではそれらを自動的に挿入できなくなります。

MySQLフォーラムから:

UNIQUEインデックスは、インデックス内のすべての値が異なる必要があるような制約を作成します。既存の行と一致するキー値を持つ新しい行を追加しようとすると、エラーが発生します。すべてのエンジンで、UNIQUEインデックスは、NULLを含む可能性のある列に複数のNULL値を許可します。

于 2011-03-24T09:23:16.913 に答える