insert-update 동시 - MySQL 테이블에 삽입하거나 존재하는 경우 업데이트하십시오.




key count (9)

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)

고유 키가 id 이고 데이터베이스에 id = 1 행이 있다고 가정 해 보겠습니다. 이 경우이 값으로 해당 행을 업데이트하려고합니다. 일반적으로 이는 오류를 발생시킵니다. insert IGNORE 하면 오류를 무시하지만 여전히 업데이트되지 않습니다.


SQLite를 사용할 때 :

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

id 가 기본 키인 경우 제공됩니다. 아니면 그냥 다른 행을 삽입합니다. INSERT (SQLite)를 참조하십시오.


배치 삽입을 사용하는 경우 다음 구문을 사용하십시오.

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;

또한 고유 키 제약에 대한 우려를 잊지 마십시오.

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

이 시도:

INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'

노트 :
여기서 id가 기본 키인 경우 첫 번째 삽입 후 id='1' 을 삽입 할 때마다 id='1' 을 삽입하면 이름과 나이가 업데이트되고 이전 이름이 변경됩니다.


이것을보십시오 :

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

희망이 도움이됩니다.


그냥 내가이 솔루션을 찾고 있었지만 다른 동일하게 구조화 된 테이블 (내 경우에는 웹 사이트 테스트 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 의 열을 나열 할 필요는 없지만 더 나은 방법이라고 생각합니다.



SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )

SQL Server 2005 이상에서는 INNER JOINCROSS APPLY 바꿀 CROSS APPLY .

SELECT  Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM    Orders
CROSS APPLY
        (
        SELECT  TOP 1 LineItems.Quantity, LineItems.Description
        FROM    LineItems
        WHERE   LineItems.OrderID = Orders.OrderID
        ) LineItems2

ORDER BY 가없는 TOP 1 은 결정적이지 않습니다.이 쿼리를 통해 주문 당 하나의 광고 항목을 얻을 수 있지만 어느 것이 될지는 정의되지 않았습니다.

쿼리를 여러 번 호출하면 기본 주문이 변경되지 않은 경우에도 동일한 주문에 대해 다양한 광고 항목이 제공 될 수 있습니다.

결정 성있는 순서를 원하면 가장 안쪽의 쿼리에 ORDER BY 절을 추가해야합니다.





mysql sql insert-update