必要なのは、新しい行を作成するのではなく、更新する行の重複に違反する1つのインデックスの衝突だけです。インデックスの衝突は主キーである可能性があり、単一の列または複数の列にまたがる複合インデックスである別のインデックスに1つあります。
当然のことながら、以下はかなり不十分ですが、私が今できる限り想像力に富んでいます。
create table user
(
id int auto_increment primary key,
userName varchar(20) not null,
friendCount int not null,
unique key(userName)
);
insert user(userName,friendCount) values('Jason7',0) on duplicate key update friendCount=friendCount+1;
select * from user;
+----+----------+-------------+
| id | userName | friendCount |
+----+----------+-------------+
| 1 | Jason7 | 0 |
+----+----------+-------------+
insert user(userName,friendCount) values('Fred',0) on duplicate key update friendCount=friendCount+1;
select * from user;
+----+----------+-------------+
| id | userName | friendCount |
+----+----------+-------------+
| 1 | Jason7 | 0 |
| 2 | Fred | 0 |
+----+----------+-------------+
insert user(userName,friendCount) values('Fred',0) on duplicate key update friendCount=friendCount+1;
+----+----------+-------------+
| id | userName | friendCount |
+----+----------+-------------+
| 1 | Jason7 | 0 |
| 2 | Fred | 1 |
+----+----------+-------------+