Ответ от rekiem87 правильный, как и два комментария к Вопросу.
UPSERT
Помимо этих пунктов, если вы хотите обновить существующую записьили иным образом вставьте новый, , такое поведение обычно известно как UPSERT
(имеется в виду, UPdate или еще inSERT) или «слияние».
Насколько я помню, такая функция не определена в стандарте SQL.Но многие базы данных реализовали одну.
Например, в Postgres используйте INSERT ON CONFLICT
.См. этот первый взгляд , этот учебник , это сообщение , описание функции для Postgres 9.5 и эту презентацию на YouTube.
INSERT INTO user_ ( username_ , password_ )
VALUES ( 'Alice' , 'pw123' )
ON CONFLICT ( username_ )
DO UPDATE SET ( password_ ) = ( 'pw123' )
;
Обратите внимание, что по крайней мере в реализации Postgres вы можете выбрать ничего не делать, если строка уже существует.
INSERT INTO user_ ( username_ , password_ )
VALUES ( 'Alice' , 'pw123' )
ON CONFLICT ( username_ )
DO NOTHING
;
Конечно, я игнорируювся тема правильного хранения паролей для пользователей.Я уверен, что этот пример в вопросе довольно надуманный, и вы бы никогда просто не писали пароли.