# 39, & # 39 exists& 않을 경우 삽입하십시오 방법. mysql 에서?

구글링 시작했는데, 이 기사 에서 발견되는 이야기하고 있는 뮤텍스에 표.

I have a table 함께 ~ 14 만 레코드는유지합니다. 만약 내가 동일한 형식의 데이터를 더 추가할 수 있는 방법이 있는지 확인합니다 사용하지 않고 레코드 I 삽입할지 존재하지 않는 한 쌍의 쿼리합니다 (즉, 체크 및 원-부트 삽입하려면 쿼리하지 한 결과 설정되었습니다 비워집니다)?

'현장' 에서 '구속' 고유해야 수행합니까 삽입하십시오 페일오버됩니다 it& # 39 의 경우 이미 보장하기 위한 것인가?

  • 를 통해 삽입하십시오 실행하십시오 구속조건으로 때는 내가 할 것으로 보인다 * php 스크립트는 지르는.
질문에 대한 의견 (8)
해결책

'표' 를 사용하여 무시하시겠습니까 삽입하십시오

&gt &lt. (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)

  • 게시물로의 (bogdan.org.ua) 에서 [google& # 39 의 웹스체] [1] :*) 에 따르면

&gt. 18일 10월 2007년 &gt. &gt. 쒖옉? 섎젮硫? mysql, 구문 제시된 최신 vmware. 제목이 없습니다. &gt. 폴링합니다. 이를 위해 여러 지정하십시오. 수축됐는데 아주 손쉬운 방법 &gt. 기존 기능을 사용하는 것으로 보인다. &gt. &gt. 3 가지 해결책을: 삽입하십시오 무시하시겠습니까 사용하여, 교체 또는 &gt. 복제본임을 삽입하십시오 등 주요 업데이트하십시오. &gt. &gt. 우리는 table: 상상해 보십시오. &gt. &gt. 테이블 만들기 '성적표' ( &gt. ensembl_transcript_id varchar (20) ',' NOT NULL &gt. unsigned int (10) ',' transcript_chrom_start NOT NULL &gt. unsigned int (10) ',' transcript_chrom_end NOT NULL &gt. 기본 키 ('ensembl_transcript_id') &gt. 기본 문자세트 latin1, InnoDB) 엔진 = = &gt. &gt. &gt. 이제 우리는 임포트하지 성적 증명서 자동 파이프라인간의 있다는 걸 알았다 &gt. 충스러웠으니 앵마블 올라가는 것으로, 다양한 이유로 파이프라인 &gt. 언제든지 실행 단계로 나눌 수 있습니다. 그래서 우리는 두 확인해야 &gt. 창조하셨노: 1) 의 반복 실행을 파이프라인간의 lionbridge 폐기하려면 않습니다. &gt. 데이터베이스, 2) 반복 실행을 인해 "복제본임을 죽사오나 않습니다. &gt. 기본 키 '오류뿐만. &gt. &gt. 방법 1. 대체 사용 &gt. &gt. 아주 간단합니다. &gt. &gt. '성적표' 로 교체 &gt. # 39, & # 39 ENSORGT00000000001& ensembl_transcript_id 세트 ',' = &gt. ',' = 12345 transcript_chrom_start &gt. '=' transcript_chrom_end 12678. &gt. &gt. &gt. 이 경우 기록하십시오 덮어씁니다. 만약 그렇다면 읽어봤어 &gt. 만들 수 있을 것으로 보인다. 그러나 이 방법을 사용하면 효율적인 있지 않습니다. &gt. 우리 사례: 우리는 기존 기록, 덮어쓸지 않아도 괜찮아 &gt. 그냥 저들이요 건너뛰려면 &gt. &gt. 방법 2: 또한 삽입하십시오 무시하시겠습니까 사용하여 매우 단순하다. &gt. &gt. '성적표' 를 무시하시겠습니까 삽입하십시오 &gt. # 39, & # 39 ENSORGT00000000001& ensembl_transcript_id 세트 ',' = &gt. ',' = 12345 transcript_chrom_start &gt. '=' transcript_chrom_end 12678. &gt. &gt. &gt. 여기서 "ensembl_transcript_id" 는 이미 있는 경우 &gt. 데이터베이스를 자동으로 건너뛸지 (무시됨) 될 수 없다. (좀 더 정확한, &gt. mysql 에서 쿼트에 참조서 보겠습니다. "를 사용하는 경우 무시 &gt. 키워드, 오류뿐만 실행하는 동안 발생한 기술서임을 삽입하십시오 있다. &gt. 대신 개의경고 취급됩니다. 예를 들어, 행, 무시하시겠습니까 않고 있는 &gt. 중복 또는 기본 키 값은 기존 고유해야 테이블의 인덱스 &gt. 오류 및 발생하여 중복 키 기술서임을 중단되었습니다. ".) 이 경우 &gt. 아직 존재하지 싫어하겠어 기록하십시오 얻게된다면 조성된다. &gt. &gt. 이 두 번째 방법은 여러 가지 단점이 등 잠재적 공략점 &gt. 다른 문제가 발생할 경우 질의 비 낙태 (참조: &gt. 수동). 따라서 그 이전에 없이 테스트되었습니다 경우에 사용할 수 있습니다 &gt. 무시됨 키워드. &gt. &gt. There is one more 옵션: '의 주요 업데이트' 복제본임을 삽입하십시오 사용할 수 있습니다. &gt. 구문, 업데이트 (update) 부품 그냥 아무것도 안 하는 몇 가지 의미가 &gt. 0+0 (제프리 수행하는 제안됩니다 같은 작업을 계산 (빈) &gt. id = id 숙제를 무시하려면 mysql 최적화이든 engine 이 &gt. 작업). 이 방법을 이용하여 디렉토리에만 복제본임을 무시하는 것이 &gt. 다른 오류뿐만, 여전히 주요 이벤트를 중단합니다. &gt. &gt. 이에 따라 최후통첩장: 이 게시물은 사파르브 영감을 얻었다. 난 또 대한 생각 &gt. 그의 다른 게시물에서 상의하십시오 먹어서나 유연한 SQL 질의입니다.

[1]: q = 캐시 http://webcache.googleusercontent.com/search bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html?

해설 (16)
  • Solution:*
INSERT INTO `table` (`value1`, `value2`) 
SELECT 'stuff for value1', 'stuff for value2' FROM DUAL 
WHERE NOT EXISTS (SELECT * FROM `table` 
      WHERE `value1`='stuff for value1' AND `value2`='stuff for value2' LIMIT 1) 
  • Explanation:*

가장 안쪽의 쿼리하지

SELECT * FROM `table` 
      WHERE `value1`='stuff for value1' AND `value2`='stuff for value2' LIMIT 1

'존재하지 않는 경우 이미' 으로 사용될 수 있는 데이터를 찼음을 탐지합니다 행일 삽입됨. 이러한 종류의 발견될 수 있는 한 뒤, 행, 즉 제한값 쿼리하지 정지점을 '1' (마이크로 최적화이든 생략해야 있다).

중간 쿼리하지

SELECT 'stuff for value1', 'stuff for value2' FROM DUAL

이 값은 seabreeze 삽입됨. 이중 '특별' 한 행, 1 열 테이블 () 는 현재 Oracle 에서 기본적으로 모든 데이터베이스 (http://otl. https://en.wikipedia.org/wiki/DUAL_table). 이중 '에서' i got a 버전 5.7.26 에서 mysql 서버 쿼리하지 유효함 때 이전 버전 (예: 5.5.60, 하지만 생략) '에서 정보를 필요로 하는 것으로 보인다. 존재하지 않는 경우 빈 결과 집합을 사용하여 '중간' 쿼리하지 되돌려줍니다 가장 안쪽의 쿼리하지 일치하는 데이터를.

외부 쿼리하지

INSERT INTO `table` (`value1`, `value2`) 

데이터 삽입물의 경우 반환됨 의해 중간 질의입니다.

해설 (13)

켜짐이 복제본임을 주요 업데이트 또는 삽입하십시오 무시됨 솔루션뀉뀉뀉뀉 MySQL 과 될 수 있습니다.

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

또는:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

또는:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]
해설 (0)

예외적으로 단순한 모든 구속을 어떻게해야합니다 경우 해당 작업을 사용할 수 있습니다. 예를 들면 다음과 같다:

  • 않을 경우 대리모를 기본 키
  • 제약조건을 고유해야 열
  • 여러 단으로 구성된 고유해야 구속

정말 믿을 수 로만스였나 것 같다. I know it 는 우리와 함께 공유할 수 있는 링크를 나쁜거라 팽팽히 맞섰다. ; - (

하지만 난 이 대답이 있기 때문에 필요에 칠하려면 네베를레스 열거하십시오 것 같다. (그렇지 않을 경우 5월 트리거할 너회의 업데이트하십시오 요구 사항, 될 수 있는 좋은 Thing&quot "; (TM) 도).

  • 편집됩니다 *: 데이터베이스 고유 제약, 예외적으로 죽이려하겠어요 삽입하십시오 분할합니다 던질 경우 데이터베이스 수준에서 드라이버에 의해 전했다. 이 스크립트는, 곧 정지점을 수신기마다 실패. Php 를 비활성화해야 가능한 주소 그 가방.
해설 (4)
REPLACE INTO `transcripts`
SET `ensembl_transcript_id` = 'ENSORGT00000000001',
`transcript_chrom_start` = 12345,
`transcript_chrom_end` = 12678;

이 경우 기록하십시오 덮어씁니다. 없을 경우에는 이 조성된다.

해설 (1)

Php 는 지정된 모든 열 수 있는 경우에만 행일 삽입하십시오 슬라이드에서는 함수 값을 # 39 표, 이미 존재하는 don& 없다.

  • 단, 이 중 하나가 다른 행일 추가될 예정이다.

이 경우 - 테이블이 비워집니다 행일 추가될 예정이다.

  • 어디에 있는지 지정된 열 경우 지정된 값, 행, 행 won& # 39 할 수 없다 "고 덧붙였다.

함수은 insert_unique ($ $ table,) 은 { if (카운트입니다 ($) 은) { $ table = mysql_real_escape_string ($ table); var = $ array_map (& # 39, mysql_real_escape_string& $ # 39,) 은.

&quot 삽입하십시오 필요 = $ $ table ',' ('". bigadmin (& # 39, ',' & # 39, array_keys ($) 은), '.&quot) "; & # 39 를 선택한 &quot &quot $ 필요. =;;). join (&quot, & # 39, & # 39$ &quot,,) 은 .&quot, & # 39. 이중 &quot 에서;; 존재하지 않는 &quot 필요. = $ ($ table '선택' 에서 1 creditbank. ";;

포리치 (col = $ $ 로 &gt var. $ val) & # 39 '$ $ $ val&' =. = &quot 필요, 열, # 39. 및 ";

substr 필요 = $ ($ 필요, 0, - 5). ") 제한값 1";

$ res = mysql_query ($ 필요) 또는 죽사오나 (); mysql_insert_id 반품하십시오 (); }

반품하십시오 거짓값. }

사용 예시:

<?php
insert_unique('mytable', array(
  'mycolumn1' => 'myvalue1',
  'mycolumn2' => 'myvalue2',
  'mycolumn3' => 'myvalue3'
  )
);
?>
해설 (2)

다음과 같이 해 보십시오.

IF (SELECT COUNT(*) FROM beta WHERE name = 'John' > 0)
  UPDATE alfa SET c1=(SELECT id FROM beta WHERE name = 'John')
ELSE
BEGIN
  INSERT INTO beta (name) VALUES ('John')
  INSERT INTO alfa (c1) VALUES (LAST_INSERT_ID())
END
해설 (1)

이 경우 어떻게 해결할 것인지를 다루는 여러 가지 답을 할 수 있는 '독특한' 키 '또는' 무시 '에 함께 견제가 인덱스화할 복제본임을 삽입하십시오'. 항상 그런 것은 아니다 '는 길이 고유해야 등' 구속 (1000년 바이트입니다) 변화시킬 수 있는 못할 수도 있습니다. 예를 들어, 워드프레스 ('wp_postmeta') 에서 메타데이터를 사용하여 작업할 수 있었습니다.

난 결국 이 두 개의 쿼리합니다 해결했다.

UPDATE wp_postmeta SET meta_value = ? WHERE meta_key = ? AND post_id = ?;
INSERT INTO wp_postmeta (post_id, meta_key, meta_value) SELECT DISTINCT ?, ?, ? FROM wp_postmeta WHERE NOT EXISTS(SELECT * FROM wp_postmeta WHERE meta_key = ? AND post_id = ?);

1 은 '일반' 업데이트 때 쿼리하지 쿼리하지 미치지 않고 관련 없는 데이터세트를. 'A' 가 아닌 '의존하고 있는 삽입하십시오 쿼리하지 2 는', 즉 '때' 가 # 39 만 t, 삽입하십시오 csetup 데이터세트를 doesn& 존재합니다.

해설 (0)

종료기:

// Check if exist cod = 56789
include "database.php";

$querycheck = mysql_query ("SELECT * FROM `YOURTABLE` WHERE `xxx` = '56789';");
$countrows = mysql_num_rows($querycheck);
if($countrows == '1')
{
  // Exist 
}
else
{
 // .... Not exist
}

또는 할 수 있습니다.

// Check if exist cod = 56789
include "database.php";

$querycheck = mysql_query ("SELECT * FROM `YOURTABLE` WHERE `xxx` = '56789';");
$countrows = mysql_num_rows($querycheck);
while($result = mysql_fetch_array($querycheck))
{
    $xxx = $result['xxx'];
    if($xxx == '56789')
    {
      // Exist
    }
    else
    {
      // Not exist
    }
}

이 방법은 빠르고 쉽게 수행할 수 있습니다. & # 39 의 속도를 높일 수 있는 대형 테이블 인덱스를 위한 쿼리하지 열을 xxx& # 39;; (내 예).

해설 (1)

뭔가 계속 눈여겨볼 만한 것이 기본 키 무시하시겠습니까 삽입하십시오 증분할 나열할지 기술서임을 성공적이었습니다 방관하겠나 삽입하십시오 마찬가지로 정상적인 것이다.

이로 인해 갭스 프로그래머용 만들 수 있는 기본 키 내 몸과 마음이 불안했다. 달려 있거나 잘못 설계된 응용 프로그램이 될 수도 있지만, 완벽한 변동분 기본 키 및 두통.

안으로 'innodb_autoinc_lock_mode = 0' (서버 설정, 에는 성능이 약간 hit) 또는 1 을 사용하여 쿼리를 smartupdate 실패하지 않습니다 (이 역시 에는 성능 저하 및 추가적인 코드).

해설 (2)