Programing

MySQL 테이블에 삽입하거나 존재하는 경우 업데이트

lottogame 2020. 9. 29. 07:10
반응형

MySQL 테이블에 삽입하거나 존재하는 경우 업데이트


데이터베이스 테이블에 행을 추가하고 싶지만 동일한 고유 키가있는 행이 있으면 행을 업데이트하고 싶습니다.

예를 들면

insert into table (id, name, age) values(1, "A", 19)

고유 키가 id이고 내 데이터베이스에 id = 1. 이 경우 해당 행을 이러한 값으로 업데이트하고 싶습니다. 일반적으로 이것은 오류를 제공합니다. 사용 insert IGNORE하면 오류가 무시되지만 여전히 업데이트되지 않습니다.


사용하다 INSERT ... ON DUPLICATE KEY UPDATE

질문:

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 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'이름과 나이가 업데이트되고 이전 이름의 나이가 변경됩니다.


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);

이 모든 솔루션은 귀하의 질문과 관련하여 작동합니다.

이 성명서에 대해 자세히 알고 싶다면 이 링크를 방문하십시오.


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없지만 더 나은 방법이라는 데 동의합니다.


제 경우에는 아래 쿼리를 만들었지 만 id1이 이미 존재하고 나이가 이미 있으면 첫 번째 쿼리 age에서 값이 없는 첫 번째 쿼리를 만들면 age이 없습니다.

REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19

for avoiding above issue create query like below

INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19

may it will help you ...


In case, you want to keep old field (For ex: name). The query will be:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name=name, age=19;

INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

Also do not forget to concern about the unique key constraint.

ALTER TABLE `table` ADD UNIQUE `unique_key` ( `id` ) 

참고URL : https://stackoverflow.com/questions/4205181/insert-into-a-mysql-table-or-update-if-exists

반응형