[SQL] 조회수 증가 쿼리를 한번에 (insert or update) 가능한가요?
글쓴이: ohdol / 작성시간: 수, 2007/01/24 - 1:45오후
지금은 select 해보고 있으면 update 없으면 insert 하는 방식으로 동작하고 있습니다.
이걸 한 쿼리에 끝내는 방법이 있을까요?
# 테이블
create table counter (
seq int primary key,
count int default 0
);
# 현재 작동
SQL : select seq from counter where seq = 2;
CODE : if( seq )
SQL : update counter set count=count+1 where seq = 2
CODE : else
SQL : insert into counter values (2, 1)
Forums:
이렇게 하면 됩니다.
MySQL을 쓰신다면
중복키가 있으면 업데이트하고 아니면 인서트 하는 명령인
INSERT... ON DUPLICATE KEY UPDATE .. 를 써서
아래의 쿼리에서 ?를 seq 값으로 대치시키고 실행시키면 됩니다.
지원 버전은?
적어주신 SQL구문이 어느 버전부터 지원이 되는 지에 대해서 같이 적어주셔야 할 것 같네요.
예를 들어 이 구문이 4.1.X에서 지원이 되는데 3.23에서 실행을 시키면 안되니까요.
한 걸음 더 가까이
만약 업데이트
만약 업데이트 조건이 들어간다면 어떻게 해야하나요?
있으면 update, 없으면 insert가 아니라
없으면 insert,
있거나, 있더라도 크다면 update 이런식으로.. -_ -;
mysql 4.1이상입니다.
----
jai guru deva om...
----
jai guru deva om...
이런식으로 하면 될듯하네요.
위 쿼리는 seq 값이 5인것이 없으면 새로 insert 하고
있지만 count값이 5보다 작으면 1증가한 값으로 update하고 아니면 5로 업데이트하는 예입니다.
새로운걸
새로운걸 배워가네요. 감사합니다~
----
jai guru deva om...
----
jai guru deva om...
버전은...
sqlite 3.3.10 입니다.
sqlite 에서는 안되더라도 oracle이나 mysql에서의 query도 알고 싶습니다.
저런 경우가 종종 있어서 궁금했었거든요...
^^ always smile
^^ always smile
sqllite 라면
이런식으로 하면 되겠네요.
아래 쿼리에서 ?를 해당 seq 값으로 교체해서 쿼리를 날리면 됩니다.
MS SQL (T-SQL) 이라면
MS SQL (T-SQL) 이라면
? 값을 해당 seq값으로 바꾸고 쿼리를 날리면 됩니다.
Oracle 9i 이상이라면
Oracle 9i버젼 이상이라면 이렇게 하면 되지 않을까 싶네요
(테스트는 해보지 않았습니다.)
?를 해당 seq 값으로 교체후 쿼리 실행
댓글 달기