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

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

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

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

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

John               Jones             1
Steve              Smith             3

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



답변

항목 업데이트

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

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


답변

PRIMARY KEY를 안전하게 (firstName, lastName) 만들거나 최소한 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에는 클라이언트 코드에서이 명령문을 실행할 때 작성된 사용자 ID를 알려주는 기능이 있습니다.


답변

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


답변

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


답변