-1

データベース:

CREATE TABLE IF NOT EXISTS `list_advertLeaders` (
  `key` int(12) NOT NULL AUTO_INCREMENT,
  `name` varchar(18) NOT NULL,
  `points` int(9) NOT NULL,
  PRIMARY KEY (`key`)
)

したがってUPDATE、存在しない場合は、次のように行または作成します。

INSERT INTO list_advertLeaders (name, points) VALUES ('John', '1') ON DUPLICATE KEY UPDATE points=points+1

初めて実行すると、John,1 が得られます。

これを 2 回実行すると、John,2 が得られると予想されます。

それでも、新しいキー John,1 John,2 で同じ値を設定します

どのようにそれを適切な方法にするのですか?

4

3 に答える 3

1

あなたのnameフィールドは主キーではないか、一意にマークされていないため、重複が許可されています。このように「名前」を一意としてマークするようにテーブルを変更します

ALTER  TABLE `list_advertLeaders` ADD UNIQUE INDEX `name_UNIQUE` (`name` ASC);
于 2013-10-14T19:34:58.897 に答える
0

そのようなタスクのために、私はかつてやっていた:

INSERT INTO list_advertLeaders (name, points) select 'John', '0' from 
       ( select 1 as a ) a 
       where (select 1 from list_advertLeaders b where b.name='John') is null;

UPDATE list_advertLeaders set points=points+1 where name='John';

First はレコードがない場合にのみ挿入し、それ以外の場合は何もしません。名前にインデックスがあり、そのような構築が高速な場合にそれを行います(気にする場合-ベンチマークのキーのトリガーを含む他のものと比較する必要があります。これはmysqlのバージョンによって異なります)。

于 2013-10-14T19:34:14.723 に答える