데이터베이스 필드를 1 씩 증가


158

MySQL을 사용하면 로그인과 같은 필드가 있으면 sql 명령 내에서 해당 필드를 1 씩 업데이트하는 방법은 무엇입니까?

firstName, lastName 및 로그인을 만드는 INSERT 쿼리를 만들려고합니다. 그러나 firstName과 lastName의 조합이 이미 존재하면 로그인을 1 씩 늘리십시오.

테이블이 이렇게 보일 수 있습니다 ..

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

John               Jones             1
Steve              Smith             3

나는 John Jones가 사용 된 이름 인 경우 실행할 때 새로운 사람 (예 : Tom Rogers)을 삽입하거나 로그인을 늘리라는 명령을 받았습니다.

답변:


287

항목 업데이트

간단한 증가는 트릭을 수행해야합니다.

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

3
또한 응용 프로그램에 따라 WHERE 절을 추가하십시오.
BoltClock

아 진짜 !! 나는 당신이 그렇게 할 수 있다는 것을 몰랐습니다 !!! 이게 효과가 있을까요? IGNORE mytable 삽입 (firstName, 성, 로그인) 값 (John, Smith, 로그인 = 로그인 + 1)
Matt

@Matt 아니요, INSERTUPDATE입니다. 삽입을 원하면 최대 값을 얻어서 1을 더해야합니다.
Sampson

2
@Matt 귀하의 질문은 " 1로 업데이트 하는 것에 대해 "혼란을 일으켰습니다. 업데이트 된 답변에서 참조 한 다른 솔루션을 찾고 있다고 생각합니다.
Sampson

1
@Jonathan 혼란을 드려 죄송합니다. 질문을 좀 더 명확하게 업데이트했습니다.
Matt

70

PRIMARY KEY를 안전하게 (firstName, lastName) 만들거나 최소한 UNIQUE 키를 넣을 수 있다면 다음과 같이 할 수 있습니다.

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

그렇게 할 수 없다면 기본 키가 무엇이든 먼저 가져와야하므로 하나의 쿼리에서 원하는 것을 얻을 수 있다고 생각하지 않습니다.


1
64 + 바이트 기본 키는 큰 제안이 아닙니다
Jon Black

'1'대신에 변수를 사용 하시겠습니까? 즉, 중복 키 업데이트시 로그인 = 로그인 + numLogins; (물론 올바른 형식)
Matt

1
ON DUPLICATE KEY UPDATE완전히 복제 안전하지 않은 것을 조심하십시오 !
oucil 2012 년

2

당신은 당신이하려는 일을 말하지 않았지만 다른 대답에 대한 주석에서 그것을 충분히 암시했습니다. 아마 당신은 자동 증가 열을 찾고 있다고 생각합니다

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에는 클라이언트 코드에서이 명령문을 실행할 때 작성된 사용자 ID를 알려주는 기능이 있습니다.


2

나는 MySQL 전문가는 아니지만 아마도 INSERT 전에 트리거를 봐야합니다. 트리거에서 원래 테이블에 대해 select query를 실행할 수 있으며 무언가를 발견하면 새 값을 삽입하는 대신 'logins'행을 업데이트하십시오. 그러나이 모든 것은 실행중인 MySQL의 버전에 달려 있습니다.


2

이는 위의 사용을 제안 답의 숫자에 더 각주입니다 ON DUPLICATE KEY UPDATE, 조심 이인지 하지 당신이 이제까지 단일 서버 이상으로 성장 계획이라면, 당신은이를 방지하고 두 개의 쿼리를 사용하는 것이 좋습니다 그래서, 항상 복제 안전 하나의 존재를 확인한 다음에 초 중 하나 UPDATE 의 행이 존재하거나 INSERT그렇지 않을 때.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.