>  Q&A  >  본문

MySQL에서 "존재하지 않는 경우 삽입" 작업을 구현하는 방법은 무엇입니까?

<p>저는 Google 검색을 통해 이 기사를 처음 발견했습니다. <em>표준 SQL에서 INSERT if NOT EXISTS 쿼리를 작성하는 방법</em> 이 기사에는 뮤텍스 테이블에 대해 설명되어 있습니다. </p> <p>약 1,400만 개의 레코드가 포함된 테이블이 있습니다. 동일한 형식으로 더 많은 데이터를 추가하려는 경우, 한 쌍의 쿼리(즉, 확인해야 할 쿼리 하나와 삽입할 쿼리 하나, 결과 세트와 함께)를 사용하지 않고 삽입하려는 레코드가 존재하지 않는지 확인하는 방법이 있습니까? 비었다)? </p> <p>필드에 대한 <code>unique</code> 제약 조건은 <code>insert</code>가 이미 존재하는 경우 실패함을 보장합니까? </p> <p><em>은 단지 </em> 제약사항인 것 같은데, PHP를 통해 삽입을 실행하면 스크립트가 덜거덕거립니다. </p>
P粉005105443P粉005105443440일 전524

모든 응답(2)나는 대답할 것이다

  • P粉338969567

    P粉3389695672023-08-30 10:05:32

    해결책:

    으아악

    지침:

    가장 깊은 쿼리

    으아악

    WHERE NOT EXISTS条件,检测是否已存在包含要插入数据的行。找到此类的一行后,查询可能会停止,因此LIMIT 1로 사용됩니다(미세 최적화, 생략 가능).

    중간 쿼리

    으아악

    는 삽입할 값을 나타냅니다. DUAL 是指所有 Oracle 数据库中默认存在的一种特殊的单行单列表(请参阅 https://en.wikipedia.org/wiki/DUAL_table)。在 MySQL-Server 版本 5.7.26 上,当省略 FROM DUAL 时,我得到了有效的查询,但旧版本(如 5.5.60)似乎需要 FROM 信息。通过使用 WHERE NOT EXISTS, 가장 안쪽 쿼리가 일치하는 데이터를 찾으면 중간 쿼리는 빈 결과 집합을 반환합니다.

    외부 쿼리

    으아악

    데이터를 삽입합니다(중간 쿼리가 데이터를 반환하는 경우).

    회신하다
    0
  • P粉521013123

    P粉5210131232023-08-30 00:40:11

    사용INSERT IGNORE INTO table.

    또한 INSERT … ON DUPLICATE KEY UPDATE13.2.6.2 INSERT ... ON DUPLICATE KEY UPDATE 문 에서 사용할 수 있는 구문이 있습니다.


    포스트 출처: bogdan.org.ua Google 웹 캐시 기준:

    회신하다
    0
  • 취소회신하다