MySQL에 있는 경우 업데이트하고 없는 경우 삽입(AKA "upsert" 또는 "Merge")하려면 어떻게 해야 합니까?
쉽게 할 수 있는 방법은 없을까?INSERT
행이 존재하지 않을 때 또는 행UPDATE
MySQL 쿼리가 하나라도 있다면?
사용 예:
INSERT INTO `usage`
(`thing_id`, `times_used`, `first_time_used`)
VALUES
(4815162342, 1, NOW())
ON DUPLICATE KEY UPDATE
`times_used` = `times_used` + 1
오래된 질문인 건 알지만, 구글이 최근에 저를 여기로 이끌어서 다른 사람들도 여기로 올 거라고 생각해요.
@syslog가 맞습니다.구문이 있습니다.
단, 원래 질문은 MySQL에 대해 구체적으로 물었고 MySQL에는 구문이 있습니다.IMHO, 이 명령어는 상승에 사용하기 쉽고 간단합니다.매뉴얼:
REPLACE는 INSERT와 동일하게 기능하지만 테이블 내의 오래된 행이 PRIMAY KEY 또는 UNIQUIE 인덱스의 새 행과 동일한 값을 갖는 경우 새 행을 삽입하기 전에 오래된 행이 삭제됩니다.
이것은 표준 SQL이 아닙니다.설명서의 예:
CREATE TABLE test (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
data VARCHAR(64) DEFAULT NULL,
ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');
Query OK, 1 row affected (0.04 sec)
mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');
Query OK, 2 rows affected (0.04 sec)
mysql> SELECT * FROM test;
+----+------+---------------------+
| id | data | ts |
+----+------+---------------------+
| 1 | New | 2014-08-20 18:47:42 |
+----+------+---------------------+
1 row in set (0.00 sec)
편집: 적절한 경고입니다.REPLACE INTO
같지 않다UPDATE
설명서에 나와 있는 대로REPLACE
행이 있는 경우 행을 삭제하고 새 행을 삽입합니다(위의 예에서 재미있는 "해당 행 2개" 참조).즉, 기존 레코드의 모든 열 값이 교체됩니다(일부 열만 업데이트되는 것이 아닙니다).MySQL 동작REPLACE INTO
Sqlite의 그것과 매우 유사합니다.INSERT OR REPLACE INTO
레코드가 이미 존재하는 경우 일부 열(모든 열이 아니라)만 업데이트하려는 경우 이 문제를 해결하려면 이 질문을 참조하십시오.
언급URL : https://stackoverflow.com/questions/1218905/how-do-i-update-if-exists-insert-if-not-aka-upsert-or-merge-in-mysql
'programing' 카테고리의 다른 글
SQL에서 지정된 양을 초과하는 첫 번째 행을 가져오는 방법 (0) | 2022.12.21 |
---|---|
서브쿼리가 NULL인지 확인합니다. (0) | 2022.12.21 |
워드프레스를 위한 MariaDB 최적화 (0) | 2022.12.21 |
const int*, const int * const 및 int const *의 차이점은 무엇입니까? (0) | 2022.12.21 |
트리거 입력 버튼 클릭 (0) | 2022.12.21 |