Ja proponuję taki sposób:
Mamy tabelę:
Kod:
mysql> describe tabela;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | NULL | |
| nr | int(10) unsigned | NO | | NULL | |
+-------+------------------+------+-----+---------+-------+
oraz kilka rekordów:
Kod:
mysql> select * from tabela;
+----+-----+
| id | nr |
+----+-----+
| 12 | 103 |
| 24 | 245 |
+----+-----+
W taki sposób można dodać kolejny rekord:
Kod:
mysql> insert into tabela values(23, 218) on duplicate key update nr=218;
mysql> select * from tabela;
+----+-----+
| id | nr |
+----+-----+
| 12 | 103 |
| 24 | 245 |
| 23 | 218 |
+----+-----+
i zarazem uaktualnić pole:
Kod:
mysql> insert into tabela values(23, 220) on duplicate key update nr=220;
mysql> select * from tabela;
+----+-----+
| id | nr |
+----+-----+
| 12 | 103 |
| 24 | 245 |
| 23 | 220 |
+----+-----+
"on duplicate key" działa zarówno na atrybut "primary key" jak i "unique" (przynajmniej tak wynika z dokumentacji MySQL).