중복 키 업데이트 시 - 여러 열
삽입을 사용할 때 중복 키 업데이트 시 여러 열을 업데이트하는 구문은 무엇입니까?
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
'programing' 카테고리의 다른 글
도커 합성에서 볼륨을 사용하면 Mariadb 테이블이 삭제됩니다. (0) | 2023.09.02 |
---|---|
PHP 7에서 전역적으로 'strict_types' 활성화 (0) | 2023.09.02 |
고정 디브의 CSS 수평 중심화? (0) | 2023.09.02 |
MySQL : 구분자 문자열로 분할된 문자열의 왼쪽 부분? (0) | 2023.09.02 |
제출 단추를 사용하지 않고 유효성 검사를 트리거하는 방법 (0) | 2023.09.02 |