Увеличить поле базы данных на 1 - PullRequest
139 голосов
/ 04 мая 2010

В MySQL, если у меня есть поле, например, логины, как мне обновить это поле на 1 в команде sql?

Я пытаюсь создать запрос INSERT, который создает firstName, lastName и логины. Однако, если комбинация firstName и lastName уже существует, увеличьте логины на 1.

чтобы таблица могла выглядеть следующим образом ..

firstName----|----lastName----|----logins

John               Jones             1
Steve              Smith             3

Мне нужна команда, которая при запуске добавит нового человека (например, Тома Роджерса) или увеличит число входов в систему, если в качестве имени используется Джон Джонс

Ответы [ 5 ]

261 голосов
/ 04 мая 2010

Обновление записи:

Простое приращение должно сработать.

UPDATE mytable 
  SET logins = logins + 1 
  WHERE id = 12

Вставить новую строку или Обновить, если она уже есть:

Если вы хотите обновить ранее существующую строку или вставить ее, если она еще не существует, вы можете использовать синтаксис REPLACE или INSERT...ON DUPLICATE KEY UPDATE вариант (Как Роб Ван Дам продемонстрировал в свой ответ ).

Вставка новой записи:

Или, может быть, вы ищете что-то вроде INSERT...MAX(logins)+1? По сути, вы бы запустили запрос, подобный следующему - возможно, немного более сложный в зависимости от ваших конкретных потребностей:

INSERT into mytable (logins) 
  SELECT max(logins) + 1 
  FROM mytable
69 голосов
/ 04 мая 2010

Если вы можете безопасно сделать (firstName, lastName) ПЕРВИЧНЫЙ КЛЮЧ или хотя бы поставить на них УНИКАЛЬНЫЙ ключ, то вы можете сделать это:вам нужно будет сначала выбрать тот первичный ключ, поэтому я не думаю, что вы могли бы достичь того, чего хотите, в одном запросе.

2 голосов
/ 04 мая 2010

Я не эксперт в MySQL, но вы, вероятно, должны посмотреть на триггеры, например. ДО ВСТАВКИ. В триггере вы можете выполнить запрос select в исходной таблице и, если он что-то нашел, просто обновить строку 'logins' вместо вставки новых значений. Но все это зависит от версии MySQL, которую вы используете.

2 голосов
/ 04 мая 2010

Вы не сказали, что пытаетесь сделать, но достаточно намекали на это в комментариях к другому ответу. Я думаю, что вы, вероятно, ищете столбец автоинкремента

create table logins (userid int auto_increment primary key, 
  username varchar(30), password varchar(30));

тогда никакой специальный код не требуется при вставке. Just

insert into logins (username, password) values ('user','pass');

MySQL API имеет функции, чтобы сообщать вам, какой идентификатор пользователя был создан при выполнении этого оператора в клиентском коде.

1 голос
/ 31 января 2017

Это скорее сноска к ряду приведенных выше ответов, в которых предлагается использовать ON DUPLICATE KEY UPDATE, ОСТОРОЖНО , что НЕ всегда безопасна для репликации, так что если вы когда-либо планируете при выходе за пределы одного сервера вы захотите избежать этого и использовать два запроса: один для проверки существования, а затем второй для либо UPDATE, если строка существует, либо INSERT, если строка существует. это не так.

...