Увеличение поля базы данных на 1
С MySQL, если у меня есть поле, например логинов, как я могу обновить это поле на 1 в команде sql?
Я пытаюсь создать запрос INSERT, который создает firstName, lastName и logins. Однако, если комбинация firstName и lastName уже существует, увеличьте логины на 1.
поэтому таблица может выглядеть так.
firstName----|----lastName----|----logins John Jones 1 Steve Smith 3
Я после команды, что при запуске будет либо вставлять нового человека (то есть Тома Роджерса), либо увеличивать логины, если использовать имя Джона Джонса ..
Обновление записи:
Простое приращение должно сделать трюк.
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
Если вы можете безопасно сделать (firstName, lastName) PRIMARY KEY или хотя бы поместить на них ключ UNIQUE, вы можете сделать это:
INSERT INTO logins (firstName, lastName, logins) VALUES ('Steve', 'Smith', 1) ON DUPLICATE KEY UPDATE logins = logins + 1;
Если вы не можете этого сделать, тогда вам нужно будет получить все первичные ключи, поэтому я не думаю, что вы могли бы достичь того, чего хотите в одном запросе.
Вы не сказали, что вы пытаетесь сделать, но вы намекали на это достаточно хорошо в комментариях к другому ответу. Я думаю, что вы, вероятно, ищете автоинкрементный столбец
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 имеет функции, чтобы сообщить вам, какой идентификатор пользователя был создан при выполнении этого оператора в клиентском коде.
Я не эксперт в MySQL, но вы, вероятно, должны смотреть на триггеры, например, до INSERT. В триггере вы можете запустить запрос выбора в своей исходной таблице, и если он найдет что-то, просто обновите «логины» строки вместо того, чтобы вставлять новые значения. Но все это зависит от версии MySQL, которую вы запускаете.
Это больше примечание к ряду ответов выше, которые предлагают использовать ON DUPLICATE KEY UPDATE
, ОСТОРОЖНО, что это НЕ всегда безопасно для репликации, поэтому, если вы когда-либо планируете расти за пределами одного сервера, вы захотите избежать этого и использовать два запроса, один для проверки существования, а затем второй или UPDATE
когда существует строка, или INSERT
когда это не так.