# 39, & # 39 exists& 않을 경우 삽입하십시오 방법. mysql 에서?
구글링 시작했는데, 이 기사 에서 발견되는 이야기하고 있는 뮤텍스에 표.
I have a table 함께 ~ 14 만 레코드는유지합니다. 만약 내가 동일한 형식의 데이터를 더 추가할 수 있는 방법이 있는지 확인합니다 사용하지 않고 레코드 I 삽입할지 존재하지 않는 한 쌍의 쿼리합니다 (즉, 체크 및 원-부트 삽입하려면 쿼리하지 한 결과 설정되었습니다 비워집니다)?
'현장' 에서 '구속' 고유해야 수행합니까 삽입하십시오 페일오버됩니다 it& # 39 의 경우 이미 보장하기 위한 것인가?
- 를 통해 삽입하십시오 실행하십시오 구속조건으로 때는 내가 할 것으로 보인다 * php 스크립트는 지르는.
778
10
'표' 를 사용하여 무시하시겠습니까 삽입하십시오
> <. (http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html) 참조.
39, s 도 there& '에 대한 설명이 복제본임을 삽입하십시오 주요 업데이트' 구문을 찾을 수 있습니다. [dev.mysql.com] (http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html)
>. 18일 10월 2007년 >. >. 쒖옉? 섎젮硫? mysql, 구문 제시된 최신 vmware. 제목이 없습니다. >. 폴링합니다. 이를 위해 여러 지정하십시오. 수축됐는데 아주 손쉬운 방법 >. 기존 기능을 사용하는 것으로 보인다. >. >. 3 가지 해결책을: 삽입하십시오 무시하시겠습니까 사용하여, 교체 또는 >. 복제본임을 삽입하십시오 등 주요 업데이트하십시오. >. >. 우리는 table: 상상해 보십시오. >. >. 테이블 만들기 '성적표' ( >. ensembl_transcript_id varchar (20) ',' NOT NULL >. unsigned int (10) ',' transcript_chrom_start NOT NULL >. unsigned int (10) ',' transcript_chrom_end NOT NULL >. 기본 키 ('ensembl_transcript_id') >. 기본 문자세트 latin1, InnoDB) 엔진 = = >. >. >. 이제 우리는 임포트하지 성적 증명서 자동 파이프라인간의 있다는 걸 알았다 >. 충스러웠으니 앵마블 올라가는 것으로, 다양한 이유로 파이프라인 >. 언제든지 실행 단계로 나눌 수 있습니다. 그래서 우리는 두 확인해야 >. 창조하셨노: 1) 의 반복 실행을 파이프라인간의 lionbridge 폐기하려면 않습니다. >. 데이터베이스, 2) 반복 실행을 인해 "복제본임을 죽사오나 않습니다. >. 기본 키 '오류뿐만. >. >. 방법 1. 대체 사용 >. >. 아주 간단합니다. >. >. '성적표' 로 교체 >. # 39, & # 39 ENSORGT00000000001& ensembl_transcript_id 세트 ',' = >. ',' = 12345 transcript_chrom_start >. '=' transcript_chrom_end 12678. >. >. >. 이 경우 기록하십시오 덮어씁니다. 만약 그렇다면 읽어봤어 >. 만들 수 있을 것으로 보인다. 그러나 이 방법을 사용하면 효율적인 있지 않습니다. >. 우리 사례: 우리는 기존 기록, 덮어쓸지 않아도 괜찮아 >. 그냥 저들이요 건너뛰려면 >. >. 방법 2: 또한 삽입하십시오 무시하시겠습니까 사용하여 매우 단순하다. >. >. '성적표' 를 무시하시겠습니까 삽입하십시오 >. # 39, & # 39 ENSORGT00000000001& ensembl_transcript_id 세트 ',' = >. ',' = 12345 transcript_chrom_start >. '=' transcript_chrom_end 12678. >. >. >. 여기서 "ensembl_transcript_id" 는 이미 있는 경우 >. 데이터베이스를 자동으로 건너뛸지 (무시됨) 될 수 없다. (좀 더 정확한, >. mysql 에서 쿼트에 참조서 보겠습니다. "를 사용하는 경우 무시 >. 키워드, 오류뿐만 실행하는 동안 발생한 기술서임을 삽입하십시오 있다. >. 대신 개의경고 취급됩니다. 예를 들어, 행, 무시하시겠습니까 않고 있는 >. 중복 또는 기본 키 값은 기존 고유해야 테이블의 인덱스 >. 오류 및 발생하여 중복 키 기술서임을 중단되었습니다. ".) 이 경우 >. 아직 존재하지 싫어하겠어 기록하십시오 얻게된다면 조성된다. >. >. 이 두 번째 방법은 여러 가지 단점이 등 잠재적 공략점 >. 다른 문제가 발생할 경우 질의 비 낙태 (참조: >. 수동). 따라서 그 이전에 없이 테스트되었습니다 경우에 사용할 수 있습니다 >. 무시됨 키워드. >. >. There is one more 옵션: '의 주요 업데이트' 복제본임을 삽입하십시오 사용할 수 있습니다. >. 구문, 업데이트 (update) 부품 그냥 아무것도 안 하는 몇 가지 의미가 >. 0+0 (제프리 수행하는 제안됩니다 같은 작업을 계산 (빈) >. id = id 숙제를 무시하려면 mysql 최적화이든 engine 이 >. 작업). 이 방법을 이용하여 디렉토리에만 복제본임을 무시하는 것이 >. 다른 오류뿐만, 여전히 주요 이벤트를 중단합니다. >. >. 이에 따라 최후통첩장: 이 게시물은 사파르브 영감을 얻었다. 난 또 대한 생각 >. 그의 다른 게시물에서 상의하십시오 먹어서나 유연한 SQL 질의입니다.
[1]: q = 캐시 http://webcache.googleusercontent.com/search bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html?
가장 안쪽의 쿼리하지
'존재하지 않는 경우 이미' 으로 사용될 수 있는 데이터를 찼음을 탐지합니다 행일 삽입됨. 이러한 종류의 발견될 수 있는 한 뒤, 행, 즉 제한값 쿼리하지 정지점을 '1' (마이크로 최적화이든 생략해야 있다).
중간 쿼리하지
이 값은 seabreeze 삽입됨. 이중 '특별' 한 행, 1 열 테이블 () 는 현재 Oracle 에서 기본적으로 모든 데이터베이스 (http://otl. https://en.wikipedia.org/wiki/DUAL_table). 이중 '에서' i got a 버전 5.7.26 에서 mysql 서버 쿼리하지 유효함 때 이전 버전 (예: 5.5.60, 하지만 생략) '에서 정보를 필요로 하는 것으로 보인다. 존재하지 않는 경우 빈 결과 집합을 사용하여 '중간' 쿼리하지 되돌려줍니다 가장 안쪽의 쿼리하지 일치하는 데이터를.
외부 쿼리하지
데이터 삽입물의 경우 반환됨 의해 중간 질의입니다.
켜짐이 복제본임을 주요 업데이트 또는 삽입하십시오 무시됨 솔루션뀉뀉뀉뀉 MySQL 과 될 수 있습니다.
또는:
또는:
예외적으로 단순한 모든 구속을 어떻게해야합니다 경우 해당 작업을 사용할 수 있습니다. 예를 들면 다음과 같다:
정말 믿을 수 로만스였나 것 같다. I know it 는 우리와 함께 공유할 수 있는 링크를 나쁜거라 팽팽히 맞섰다. ; - (
하지만 난 이 대답이 있기 때문에 필요에 칠하려면 네베를레스 열거하십시오 것 같다. (그렇지 않을 경우 5월 트리거할 너회의 업데이트하십시오 요구 사항, 될 수 있는 좋은 Thing" "; (TM) 도).
이 경우 기록하십시오 덮어씁니다. 없을 경우에는 이 조성된다.
Php 는 지정된 모든 열 수 있는 경우에만 행일 삽입하십시오 슬라이드에서는 함수 값을 # 39 표, 이미 존재하는 don& 없다.
이 경우 - 테이블이 비워집니다 행일 추가될 예정이다.
함수은 insert_unique ($ $ table,) 은 { if (카운트입니다 ($) 은) { $ table = mysql_real_escape_string ($ table); var = $ array_map (& # 39, mysql_real_escape_string& $ # 39,) 은.
" 삽입하십시오 필요 = $ $ table ',' ('". bigadmin (& # 39, ',' & # 39, array_keys ($) 은), '.") "; & # 39 를 선택한 " " $ 필요. =;;). join (", & # 39, & # 39$ ",,) 은 .", & # 39. 이중 " 에서;; 존재하지 않는 " 필요. = $ ($ table '선택' 에서 1 creditbank. ";;
포리치 (col = $ $ 로 > var. $ val) & # 39 '$ $ $ val&' =. = " 필요, 열, # 39. 및 ";
substr 필요 = $ ($ 필요, 0, - 5). ") 제한값 1";
$ res = mysql_query ($ 필요) 또는 죽사오나 (); mysql_insert_id 반품하십시오 (); }
반품하십시오 거짓값. }
사용 예시:
다음과 같이 해 보십시오.
이 경우 어떻게 해결할 것인지를 다루는 여러 가지 답을 할 수 있는 '독특한' 키 '또는' 무시 '에 함께 견제가 인덱스화할 복제본임을 삽입하십시오'. 항상 그런 것은 아니다 '는 길이 고유해야 등' 구속 (1000년 바이트입니다) 변화시킬 수 있는 못할 수도 있습니다. 예를 들어, 워드프레스 ('wp_postmeta') 에서 메타데이터를 사용하여 작업할 수 있었습니다.
난 결국 이 두 개의 쿼리합니다 해결했다.
1 은 '일반' 업데이트 때 쿼리하지 쿼리하지 미치지 않고 관련 없는 데이터세트를. 'A' 가 아닌 '의존하고 있는 삽입하십시오 쿼리하지 2 는', 즉 '때' 가 # 39 만 t, 삽입하십시오 csetup 데이터세트를 doesn& 존재합니다.
종료기:
또는 할 수 있습니다.
이 방법은 빠르고 쉽게 수행할 수 있습니다. & # 39 의 속도를 높일 수 있는 대형 테이블 인덱스를 위한 쿼리하지 열을 xxx& # 39;; (내 예).
뭔가 계속 눈여겨볼 만한 것이 기본 키 무시하시겠습니까 삽입하십시오 증분할 나열할지 기술서임을 성공적이었습니다 방관하겠나 삽입하십시오 마찬가지로 정상적인 것이다.
이로 인해 갭스 프로그래머용 만들 수 있는 기본 키 내 몸과 마음이 불안했다. 달려 있거나 잘못 설계된 응용 프로그램이 될 수도 있지만, 완벽한 변동분 기본 키 및 두통.
안으로 'innodb_autoinc_lock_mode = 0' (서버 설정, 에는 성능이 약간 hit) 또는 1 을 사용하여 쿼리를 smartupdate 실패하지 않습니다 (이 역시 에는 성능 저하 및 추가적인 코드).