복붙노트

[SQL] 단일 쿼리에 삽입 여러 행에 대한 MySQL의 ON DUPLICATE KEY의 UPDATE

SQL

단일 쿼리에 삽입 여러 행에 대한 MySQL의 ON DUPLICATE KEY의 UPDATE

나는 하나의 쿼리에서 여러 행을 삽입 할 SQL 쿼리를 가지고있다. 그래서 뭔가를 같이 사용 :

$sql = "INSERT INTO beautiful (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22),
  ('Hui Ling', 25),
  ('Yumie', 29)";

mysql_query( $sql, $conn );

문제는 내가이 쿼리를 실행할 때, 나는 여부 (기본 키 아님) 고유 키, 예를 검사 할 것입니다 '이름'은 상기 체크해야하며, 이러한 '이름'가 이미 존재하는 경우, 대응하는 전체 열은 별도로 삽입, 갱신되어야한다.

'카트리나'에 관계없이 필드의 수, 데이터베이스, 전체 행에 이미 존재하는 경우, 예를 들어, 아래의 예에서, 업데이트해야합니다. '미아'가 존재하지 않는 경우 다시 상기 행을 삽입한다.

내가 사용하는 생각 :

INSERT INTO beautiful (name, age)
      VALUES
      ('Helen', 24),
      ('Katrina', 21),
      ('Samia', 22),
      ('Hui Ling', 25),
      ('Yumie', 29) ON DUPLICATE KEY UPDATE

여기에 함정이다. 나는 붙어 계속 진행하는 방법에 대해 혼동되었다. 나는 한 번에 삽입 / 업데이트하려면 여러 행을 가지고있다. 나에게 방향을 제시하시기 바랍니다. 감사.

해결법

  1. ==============================

    1.새 값을 참조하는 키워드 값을 사용 (설명서 참조).

    새 값을 참조하는 키워드 값을 사용 (설명서 참조).

    INSERT INTO beautiful (name, age)
        VALUES
        ('Helen', 24),
        ('Katrina', 21),
        ('Samia', 22),
        ('Hui Ling', 25),
        ('Yumie', 29)
    ON DUPLICATE KEY UPDATE
        age = VALUES(age),
         ...
    
  2. ==============================

    2.INSERT INTO는 ... ON DUPLICATE KEY UPDATE는뿐만 아니라 SQL Server에 대해, MYSQL을 위해 작동합니다.

    INSERT INTO는 ... ON DUPLICATE KEY UPDATE는뿐만 아니라 SQL Server에 대해, MYSQL을 위해 작동합니다.

    SQL 서버,이 문제를 해결하려면 방법은 임시 테이블에 값을 삽입, 최초의 선언에 임시 테이블, 다음 MERGE를 사용

    이 같이 :

    declare @Source table
    (
    name varchar(30),
    age decimal(23,0)
    )
    
    insert into @Source VALUES
    ('Helen', 24),
    ('Katrina', 21),
    ('Samia', 22),
    ('Hui Ling', 25),
    ('Yumie', 29);
    
    
    MERGE beautiful  AS Tg
    using  @source as Sc
    on tg.namet=sc.name 
    
    when matched then update 
    set tg.age=sc.age
    
    when not matched then 
    insert (name, age) VALUES
    (SC.name, sc.age);
    
  3. ==============================

    3.당신은 DUPLICATE KEY UPDATE ON ... 대신 INSERT의 교체 사용할 수 있습니다.

    당신은 DUPLICATE KEY UPDATE ON ... 대신 INSERT의 교체 사용할 수 있습니다.

  4. from https://stackoverflow.com/questions/2714587/mysql-on-duplicate-key-update-for-multiple-rows-insert-in-single-query by cc-by-sa and MIT license