"중복 키 업데이트 시"를 사용할 때 행이 삽입 또는 업데이트되었는지 어떻게 알 수 있습니까?
cronjob으로 매일 자정에 업데이트되는 데이터베이스가 있습니다. 외부 XML에서 새로운 데이터를 얻습니다.
우리가 하는 일은 새로운 내용을 모두 삽입하고 중복된 키가 있을 경우 해당 필드를 업데이트하는 것입니다.
INSERT INTO table (id, col1, col2, col3)
values (id_value, val1, val2, val3),
(id_value, val1, val2, val3),
(id_value, val1, val2, val3),
(id_value, val1, val2, val3),
ON DUPLICATE KEY UPDATE
col1 = VALUES (col1),
col2 = VALUES (col2),
col3 = VALUES (col3);
우리가 알고 싶은 것은 실제로 어떤 행이 삽입되었는지, 즉 새로운 항목의 목록을 갖고 싶다는 것입니다.새 삽입물을 반환할 수 있는 쿼리가 있습니까?기본적으로 우리는 새로운 삽입 횟수가 아니라 새로운 ID를 모두 얻어야 합니다.
감사해요.
삽입/업데이트 시 결과 세트의 영향을 받는 행 수를 조사하여 이 정보를 얻을 수 있습니다.
MySQL 문서에는 다음과 같은 내용이 있습니다.
ON DUFFIC KEY UPDATE를 사용하면 행이 새 행으로 삽입되면 행당 영향을 받는 행 값이 1이고 기존 행이 업데이트되면 2가 됩니다.
ROW_COUNT와 LAST_INSERT_를 결합해야 합니다.답변을 얻고 한 행씩 삽입하기 위한 ID입니다.
추가하기update_count INT NOT NULL DEFAULT 1
열을 열고 쿼리를 변경합니다.
INSERT
INTO table (id, col1, col2, col3)
VALUES
(id_value, val1, val2, val3),
(id_value, val1, val2, val3,),
(id_value, val1, val2, val3),
(id_value, val1, val2, val3),
ON DUPLICATE KEY
UPDATE
col1 = VALUES (col1),
col2 = VALUES (col2),
col3 = VALUES (col3),
update_count = update_count + 1;
가 증가할 수도 있습니다.BEFORE UPDATE
쿼리를 그대로 유지할 수 있는 trigger입니다.
How I did in PHP:
1) 단순 쿼리 SELECT MAX(id)를 선택하고 중복 삽입 전에 테이블에서 $max_id로 기억합니다.
2) 그런 다음 업데이트 프로세스 중에 영향을 받는 행의 ID를 수집합니다(신규 또는 존재하지 않음).$ids[] = mysql_insert_id ();
3) 그러면 $ inserted_rows = max ($ids) -max_id;
4) 업데이트된 행 = 카운트 ($ids_srt) - inserted_rows
$max_id = mysql_query("SELECT MAX(id) from table");
$max_id = mysql_result($max_id, 0);
// !!! prepare here 'insert on duplicate' query in a cycle
$result=mysql_query($query);
$ids[] = mysql_insert_id();
// finish inserting and collecting affected ids and close cycle
$inserted_rows = max($ids)- $max_id;
$updated_rows = count($ids)- $inserted_rows
언급URL : https://stackoverflow.com/questions/10709380/how-to-know-if-when-using-on-duplicate-key-update-a-row-was-inserted-or-update
'programing' 카테고리의 다른 글
ID에 대괄호가 포함된 경우 ID로 DOM 요소를 찾으십니까? (0) | 2023.10.26 |
---|---|
응용프로그램별 링커 스크립트에 정의된 접근 기호 (0) | 2023.10.26 |
numpy/ctype을 사용하여 C-할당 메모리 버퍼를 노출하는 보다 안전한 방법은? (0) | 2023.10.26 |
워드프레스:next_post_link() / previor_post_link() 매개변수에 if-else 문을 삽입하시겠습니까? (0) | 2023.10.26 |
window.on before unload and window.on unload가 Firefox, Safari, Opera에서 작동하지 않습니까? (0) | 2023.10.26 |