Ради ясного синтаксиса есть еще одна синтаксическая форма;
INSERT INTO `table1` SET `id`=$id,
`col2`='$col2',
`col3`='$col3'[, ...]
ON DUPLICATE KEY UPDATE `col2`='$col2',
`col4`='$col4'[, ...]
Пример;
INSERT INTO customers SET cid=10,
createdon=NOW(),
createdby='user',
cname='Steve'
ON DUPLICATE KEY UPDATE modifiedon=NOW(),
modifiedby='user',
cname='Steve';
Если в базе данных не существует клиента с ID = 10, он будетсоздал и столбцы cid, создал на, создан, cname будет установлен.Если он существует, он будет обновлен, а столбцы, измененные, измененные, cname, будут обновлены.
ПРИМЕЧАНИЕ # 1: Если вы укажете здесь первичный ключ cid = 0, будет запущено AUTO_INCREMENT (конечно,если столбец pk определен как AUTO_INCREMENT) и запись будет вставлена!
ПРИМЕЧАНИЕ # 2: ON DUPLICATE KEY UPDATE выполняет обновление для существующей записи PK ID.Но также это делает обновление, если DUPLICATE сделан на любом столбце UNIQUE KEY.Например, если вы определили, что столбец cname имеет значение UNIQUE, то сохранение записи с уже имеющимся cname = 'Steve' приведет к ОБНОВЛЕНИЮ этой записи (не новой INSERT).Позаботьтесь об этом, потому что вы можете ожидать, что DB вернет ошибку для нарушения ограничения UNIQUE KEY, чего здесь не произойдет.