С MySQL, если у меня есть поле, скажем, логины, как мне обновить это поле на 1 в команде sql?
Я пытаюсь создать запрос INSERT, который создает firstName, lastName и логины. Однако, если комбинация firstName и lastName уже существует, увеличьте число входа на 1.
так что таблица может выглядеть следующим образом ..
firstName----|----lastName----|----logins
John Jones 1
Steve Smith 3
Я получил команду, которая при запуске вставит нового человека (например, Тома Роджерса) или увеличит число входов в систему, если имя Джона Джонса будет использовано ..
INSERT
, а неUPDATE
. Если вы хотите сделать вставку, вам нужно будет получить максимум и добавить 1 к нему.Если вы можете безопасно сделать (firstName, lastName) ПЕРВИЧНЫЙ КЛЮЧ или, по крайней мере, поместить на них УНИКАЛЬНЫЙ ключ, то вы можете сделать это:
Если вы не можете этого сделать, то вам придется сначала выбрать тот первичный ключ, поэтому я не думаю, что вы могли бы достичь того, что вы хотите, в одном запросе.
источник
ON DUPLICATE KEY UPDATE
это не полностью безопасно для репликации!Вы не сказали, что пытаетесь сделать, но достаточно намекали на это в комментариях к другому ответу. Я думаю, что вы, вероятно, ищете столбец автоматического приращения
тогда никакой специальный код не требуется при вставке. Просто
MySQL API имеет функции, чтобы сообщить вам, какой идентификатор пользователя был создан при выполнении этого оператора в клиентском коде.
источник
Я не эксперт в MySQL, но вы, вероятно, должны посмотреть на триггеры, например, перед вставкой. В триггере вы можете выполнить запрос select в исходной таблице и, если он что-то нашел, просто обновить строку 'logins' вместо вставки новых значений. Но все это зависит от версии MySQL, которую вы используете.
источник
Это скорее сноска к ряду приведенных выше ответов, в которых предлагается использовать
ON DUPLICATE KEY UPDATE
, ПОМНИТЕ, что это НЕ всегда безопасно для репликации, поэтому, если вы когда-либо планируете выход за пределы одного сервера, вам следует избегать этого и использовать два запроса. , один для проверки существования, а затем второй , чтобы либоUPDATE
, когда существует строка, или ,INSERT
когда это не так.источник