MySQL 테이블에 삽입하거나 업데이트(있는 경우)
데이터베이스 테이블에 행을 추가하고 싶은데 동일한 고유 키를 가진 행이 있는 경우 행을 업데이트합니다.
예를 들어 다음과 같습니다.
INSERT INTO table_name (ID, NAME, AGE) VALUES(1, "A", 19);
그 독특한 열쇠는ID
및 내 데이터베이스에는 와의 행이 있습니다.ID = 1
이 경우 이 값을 사용하여 행을 업데이트합니다.통상, 이것은 에러를 나타냅니다.
사용하는 경우INSERT IGNORE
에러는 무시되지만, 업데이트는 되지 않습니다.
사용
질문:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
REPLACE 체크
http://dev.mysql.com/doc/refman/5.0/en/replace.html
REPLACE into table (id, name, age) values(1, "A", 19)
배치 삽입을 사용하는 경우 다음 구문을 사용합니다.
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
...
질문에 대해서는, 다음의 몇개의 솔루션이 유효합니다.
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);
또는
INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19)
ON DUPLICATE KEY UPDATE NAME = "A", AGE = 19;
또는
REPLACE INTO table (id, name, age) VALUES(1, "A", 19);
이것을 시험해 보세요.
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
이게 도움이 됐으면 좋겠다.
이것을 시험해 보세요.
INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'
주의:
여기서 id가 프라이머리 키일 경우 첫 번째 삽입 후id='1'
삽입을 시도할 때마다id='1'
이름과 연령이 업데이트되고 이전 이름 나이가 변경됩니다.
네가 원하는 건non-primary
기준/조건으로서의 필드ON DUPLICATE
, 를 작성할 수 있습니다.UNIQUE INDEX
키를 테이블 위에 올려놓고DUPLICATE
.
ALTER TABLE `table` ADD UNIQUE `unique_index`(`name`);
두 필드를 결합하여 테이블에서 원하는 필드를 만드는 경우 마지막 파라미터에 더 많은 필드를 추가하면 됩니다.
ALTER TABLE `table` ADD UNIQUE `unique_index`(`name`, `age`);
참고: 먼저 동일한 데이터를 모두 삭제하십시오.name
그리고.age
값을 다른 행으로 값을 지정합니다.
DELETE table FROM table AS a, table AS b WHERE a.id < b.id
AND a.name <=> b.name AND a.age <=> b.age;
그 후, 이 동작에 의해,ON DUPLICATE
이벤트입니다.
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name = VALUES(name), age = VALUES(age)
SQLite 사용 시:
REPLACE into table (id, name, age) values(1, "A", 19)
단,id
는 프라이머리 키입니다.그렇지 않으면 다른 행을 삽입합니다.INSERT(SQLite)를 참조하십시오.
이 솔루션을 찾고 있지만 동일한 구조의 다른 테이블에서 업데이트를 위해 여기에 왔다고 해서(내 웹 사이트에서는 DB를 라이브 DB로 테스트):
INSERT live-db.table1
SELECT *
FROM test-db.table1 t
ON DUPLICATE KEY UPDATE
ColToUpdate1 = t.ColToUpdate1,
ColToUpdate2 = t.ColToUpdate2,
...
다른 곳에서 언급했듯이 업데이트할 열만 다음 시간 이후에 포함하면 됩니다.ON DUPLICATE KEY UPDATE
.
의 컬럼은 일람표시할 필요가 없습니다.INSERT
또는SELECT
그게 더 좋은 방법인 것 같긴 하지만요
내 경우 아래 쿼리를 만들었지만 첫 번째 쿼리는 다음과 같습니다.id
1이 이미 존재하고 에이징이 이미 존재합니다.그 후, 없이 첫 번째 쿼리를 작성하면age
의 가치보다age
없을 것이다
REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19
위의 문제를 피하기 위해 다음과 같은 쿼리를 작성합니다.
INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19
당신에게 도움이 되길...
이전 필드(예: 이름)를 유지하고자 하는 경우.쿼리는 다음과 같습니다.
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name=name, age=19;
언급URL : https://stackoverflow.com/questions/4205181/insert-into-a-mysql-table-or-update-if-exists
'programing' 카테고리의 다른 글
JavaScript를 사용하여 요소의 클래스를 변경하려면 어떻게 해야 합니까? (0) | 2022.09.05 |
---|---|
자바에서 두 날짜의 차이를 찾는 방법은 무엇입니까? (0) | 2022.09.05 |
두 날짜의 차이를 시간으로 반올림하는 방법 (0) | 2022.09.05 |
SQL Chemy 기본 Date Time (0) | 2022.09.05 |
하나의 쿼리로 mysql 데이터를 일괄 업데이트하려면 어떻게 해야 합니까? (0) | 2022.09.05 |