programing

MySQL 테이블에 삽입하거나 업데이트(있는 경우)

goodsources 2022. 9. 5. 23:21
반응형

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그게 더 좋은 방법인 것 같긴 하지만요

내 경우 아래 쿼리를 만들었지만 첫 번째 쿼리는 다음과 같습니다.id1이 이미 존재하고 에이징이 이미 존재합니다.그 후, 없이 첫 번째 쿼리를 작성하면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

반응형