Увеличение поля базы данных на 1
С MySQL, если у меня есть поле, например логинов, как я могу обновить это поле на 1 в команде sql?
Я пытаюсь создать запрос INSERT, который создает firstName, lastName и logins. Однако, если комбинация firstName и lastName уже существует, увеличьте логины на 1.
чтобы таблица выглядела так.
firstName----|----lastName----|----logins
John Jones 1
Steve Smith 3
Я после команды, которая при запуске либо ввела нового человека (т.е. Том Роджерса), либо увеличила логины, если бы использовалось имя Джона Джонса..
Ответы
Ответ 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
, когда это не так.