Подтвердить что ты не робот

Увеличение поля базы данных на 1

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

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

чтобы таблица выглядела так.

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

John               Jones             1
Steve              Smith             3

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

INSERT into mytable (logins) 
  SELECT max(logins) + 1 
  FROM mytable

Ответ 2

Если вы можете безопасно сделать (firstName, lastName) ПЕРВИЧНЫМ КЛЮЧОМ или хотя бы поместить на них ключ UNIQUE, вы можете сделать это:

INSERT INTO logins (firstName, lastName, logins) VALUES ('Steve', 'Smith', 1)
ON DUPLICATE KEY UPDATE logins = logins + 1;

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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