programing

중복 키 업데이트 시 - 여러 열

lovecodes 2023. 9. 2. 09:40
반응형

중복 키 업데이트 시 - 여러 열

삽입을 사용할 때 중복 키 업데이트 시 여러 열을 업데이트하는 구문은 무엇입니까?

INSERT INTO table1 (col1, col2, col3, col4) VALUES (’$val1’, ‘$val2’, ‘$val3’, ‘$val4’)
ON DUPLICATE KEY UPDATE col2=‘$val2’, col3=‘$val3’, col4=‘$val4’ // <-- not sure

업데이트: 저는 이것을 PHP 내에서 사용하고 있습니다.이것은 구문 문제이기 때문에 매우 관련이 있습니다.

$result = mysql_query("INSERT INTO table1 (col1, col2, col3, col4) 
                         VALUES (’$val1’, ‘$val2’, ‘$val3’, ‘$val4’)
                         ON DUPLICATE KEY UPDATE (col2=‘$val2’, col3=‘$val3’, col4=‘$val4’)")

다시 말하지만, "업데이트"의 마지막 부분에 대해서는 잘 모르겠습니다.

음, 이건 오래됐어요.그러나 물론 을 한 번만 입력하면 됩니다. 쿼리에 값을 두 번 추가할 이유가 없습니다(여러 개의 삽입물 또는 준비된 문에 유용함).

INSERT INTO table1
  (col1, col2, col3, col4)
VALUES
  ('val1', 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
  col2=VALUES(col2),
  col3=VALUES(col3) [,...]

이는 다중 삽입 문에 대해 여전히 작동한다는 장점이 있습니다.

INSERT INTO table1
  (col1, col2, col3, col4)
VALUES
  ('val1', 'val2', 'val3', 'val4'),
  ('val5', 'val6', 'val7', 'val8'),
  ('val9', 'val10', 'val11', 'val12')
ON DUPLICATE KEY UPDATE
  col2=VALUES(col2),
  col3=VALUES(col3) [,...]

현대의 PHP 예:

$sql = "INSERT INTO table1 (col1, col2, col3, col4) VALUES (?,?,?,?)
        ON DUPLICATE KEY UPDATE
        col2=VALUES(col2),
        col3=VALUES(col3),
        col4=VALUES(col4)";
$db->prepare($sql)->execute([$val1, $val2, $val3, $val4]);
INSERT INTO table1
  (`col1`, `col2`, `col3`, `col4`)
VALUES
  ('val1', 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
  `col2`='val2',
  `col3`='val3', [...]

저는 당신의 인용문과 체크 표시를 고쳤습니다.

INSERT INTO tb (name, date, stat1, stat2, stat3) 
VALUES (?, ?, ?, ?, ?) 
ON DUPLICATE KEY UPDATE stat1 = stat1 + VALUES(stat1),
                        stat2 = stat2 + VALUES(stat2), 
                        stat3 = stat3 + VALUES(stat3)

명확한 구문을 위해 다른 구문 형식이 있습니다.

INSERT INTO `table1` SET `id`=$id,
                         `col2`='$col2',
                         `col3`='$col3'[, ...]
 ON DUPLICATE KEY UPDATE `col2`='$col2',
                         `col4`='$col4'[, ...]

예;

INSERT INTO customers SET cid=10,
                          createdon=NOW(),
                          createdby='user',
                          cname='Steve'
  ON DUPLICATE KEY UPDATE modifiedon=NOW(),
                          modifiedby='user',
                          cname='Steve';

데이터베이스에 ID=10의 고객이 존재하지 않는 경우 생성되며 열 cid, 생성 위치, 생성자 cname이 설정됩니다.만약 존재한다면, 그것은 업데이트될 것이고 열들은 수정될 것이고, m에 의해 수정될 것이고, cname은 업데이트될 것입니다.

참고 #1: 여기에 기본 키 cid=0을 입력하면 AUTO_INCREMENT가 실행되고(물론 pk 열이 AUTO_INCREMENT로 정의된 경우) 레코드가 삽입됩니다!

참고 #2: 중복 키 업데이트 시 기존 PK ID 레코드를 업데이트합니다.또한 고유 키 열에서 복제가 수행된 경우에도 업데이트됩니다.예를 들어, cname 열이 UNIQUE라고 정의한 경우 이미 존재하는 cname= 'Steve'로 레코드를 저장하면 해당 레코드가 업데이트됩니다(새 INSERT가 아님).여기서 발생하지 않을 고유 키 제약 조건 위반에 대해 DB가 오류를 반환할 수 있으므로 이 점에 주의하십시오.

당신의 질문이 맞는 것 같습니다.다음은 이러한 유형의 쿼리에 대한 예입니다.

INSERT INTO Stat (id, month, year, views, redirects, onList, onMap, emails) VALUE ("' . $Id . '","' . $month . '","' . $year . '",0,0,"' . $data['onList'] . '","' . $data['onMap'] . '",0) ON DUPLICATE KEY UPDATE onList=onList+' . $data['onList'] . ', onMap=onMap+' . $data['onMap']

언급URL : https://stackoverflow.com/questions/8991593/on-duplicate-key-update-multiple-columns

반응형