2009-12-28 4 views
2

이 작업을 수행하는 방법에 대해서는 이미 잠시 기다려주십시오.고유 한 필드가없는 테이블에 이미 행이 존재하지 않으면 mysql을 삽입하십시오.

모든 솔루션에는 인덱스가있는 고유 필드가 필요합니다.

+0

나는이 유일한 필드없이 작동 생각하지 않는다 ... 내 말은, 당신이 무엇을 사용 조건 싶어합니까? – Bobby

+0

Glenn, 고유 인덱스가 없으면 UPDATE가 필요한 중복 열이 있는지를 알 수있는 방법이 없습니다. 테이블 구조를 보여주고 UPDATE 절을 트리거 할 필드를 알려 주시면 답변을 드릴 수 있습니다. –

답변

0

이미 mysql의 INSERT OR UPDATE 구문을 고려 했습니까? 아니면 업데이트로 돌아가는 대신 최신 삽입을 '취소'하시겠습니까?

편집 : affection 후 표시된 reflexion의 정확한 구문은 ON DUPLICATE KEY입니다. 기본 키 또는 적어도 고유 한 열의 중복 값에 의해서만 트리거됩니다. 니콜라스 Lescure 발견에서 당신이 게시물을 사용할 수 있습니다처럼 보인다, 당신은 트리거를 중지하고 실제 삽입을 방지하려면

CREATE TRIGGER block_dup_insert BEFORE INSERT ON my_table 
FOR EACH ROW BEGIN 
    -- check condition and stop if it would be duplicated according to your logic 
END 

:

가능한 솔루션은 다음과 유사한 BEFORE INSERT 트리거를 사용하는 것 [MySQL의 문서] [1]에 :

또 다른 방법으로는 단지 기본 키 (reason_to_stop)와 테이블 (stop_action)을 만드는 방법 "STOP 동작이"이다. 그런 다음 이 테이블을 ('do', '또는 that') => 텍스트로 미리 채우고 이 테이블 (stop_action)에 삽입하려면 사전에 채워진 값 ('do do do do ').

[1] : http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html MySQL은 트리거 문서

9

를 만들 수 없습니다 당신이 DUPLICATE KEY 장치를 ON 의 사용을 만들 수 구문 INSERT에 있지만, 존재하는 경우에는 이 없습니다. 당신이 이름, 성에 고유 인덱스를 만들 가정, 당신의 업데이트를 읽을 수 있습니다 중립 삽입을 렌더링

INSERT INTO tb (firstname, lastname) 
VALUES ('Jack', 'Doe') 
ON DUPLICATE KEY UPDATE lastname = lastname; 

합니다.

+0

고유 한 필드에만 적용 –

+0

검색 시간 .. 내게 맞춰서 만든 시간 : –

-1

Mysql 삽입 문서에는 'insert not exist'구문이 없습니다. 이 문제를 해결하려면 "삽입 ... 선택"구문을 사용하도록 사전 설정하십시오. select 부분에서 "존재하지 않음"구문을 사용하여 where 문을 추가해야합니다. 예를 들어, 당신은이를 사용할 수 있습니다

insert into tbl (firstname,lastname) select 'Jhon', 'Doe' 
from tbl where not exists (select 1 from tbl where firstname = 'Jhon' and lastname = 'Doe') limit 1; 
+0

행이 존재하지 않으면 'Jhon', 'Doe'를 선택한 결과가 나타나지 않으므로 작동하지 않습니다. tbl 그래서 행이 존재하지 않으면 삽입되지 않습니다 –

0
$sql2="INSERT INTO site_shipping (ship_oid,ship_status) 
     SELECT '$orderid', '$status' 
     FROM site_shipping 
     WHERE NOT EXISTS 
      (SELECT * 
      FROM site_shipping 
      WHERE ship_oid = '$orderid' 
     ) 
     LIMIT 1 
     "; 
관련 문제