복붙노트

[SQL] INSERT INTO 또는 두 개의 조건 UPDATE

SQL

INSERT INTO 또는 두 개의 조건 UPDATE

이 문제는 눈에 쉽게 보이는,하지만 난 단지 현명한 합리적인 시간 해결책을 발견하지 않았습니다.

다음과 같은 특징이있는 테이블을 고려 :

ID INTEGER PRIMARY KEY AUTOINCREMENT
name INTEGER
values1 INTEGER
values2 INTEGER
dates DATE

매일 새로운 행의 N 금액은 미래에 날짜를 생성하고, 유한 목록에서 나오는 '이름'으로되어있다. 나는 새로운 데이터가있을 때 새 행을 삽입 할 좋아하지만, '이름'과 '날짜'와 행이 이미 존재하는 경우, 간단하게 업데이트 할 것입니다.

제발 참고이 데이터를 다른 언어로 가압되는 조건으로는 가능하지 확인한다는 SPROC의 현재 제안 된 해결책.

해결법

  1. ==============================

    1.즉, 중복 키 업데이트에 삽입을위한 것입니다.

    즉, 중복 키 업데이트에 삽입을위한 것입니다.

    이 매뉴얼 페이지는 여기에있다.

    트릭 테이블 삽입을 수행하는 충돌이 검출 될 수 있도록하는 것이 (복합 될 수 있음) 고유 키를 가져야한다는 것이다. 따라서 업데이트가 해당 행에 그렇지 않으면 삽입이 발생합니다. 그것은 물론 기본 키가 될 수 있습니다.

    귀하의 경우에는, 당신은 복합 키 등을 가질 수

    unique key(theName,theDate)
    

    행이 이미있는 경우 충돌이 검출되고, 업데이트가 발생합니다.

    create table myThing
    (   id int auto_increment primary key,
        name int not null,
        values1 int not null,
        values2 int not null,
        dates date not null,
        unique key(name,dates) -- <---- this line here is darn important
    );
    
    insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    insert myThing(name,values1,values2,dates) values (778,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    -- do the 1st one a few more times:
    insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    insert myThing(name,values1,values2,dates) values (777,1,1,'2015-07-11') on duplicate key update values2=values2+1;
    

    결과 보여줘

    select * from myThing;
    +----+------+---------+---------+------------+
    | id | name | values1 | values2 | dates      |
    +----+------+---------+---------+------------+
    |  1 |  777 |       1 |       4 | 2015-07-11 |
    |  2 |  778 |       1 |       1 | 2015-07-11 |
    +----+------+---------+---------+------------+
    

    예상대로, 중복 키 업데이트 작업에 단 2 행을 삽입합니다.

  2. ==============================

    2.이것은 쉬워요:

    이것은 쉬워요:

  3. from https://stackoverflow.com/questions/32468456/insert-into-or-update-with-two-conditions by cc-by-sa and MIT license