2014-04-15 4 views
0

아직 행이 존재하지 않는 경우에만 행을 삽입하려고합니다.MySQL 5.5.30 INSERT가 존재하지 않는 경우에만

나는 포럼을 통해 살펴 했어이 구문은 내가 원하는 것으로 나타납니다

INSERT INTO tblSites (site,homepage) VALUES ('A','www.a.com') 
WHERE NOT EXISTS (SELECT * FROM tblSites where homepage='www.a.com') 

내가 구문 오류가 발생합니다.

You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right 
syntax to use near 'WHERE NOT EXISTS (SELECT * FROM tblSites where homepage='www.a.com')' 
at line 1 

내가 읽었으며 모두가이 구문을 사용하고있는 것 같습니다. 사용하고있는 버전에서 사용할 수 있습니까? 아래에 몇 가지 다른 옵션을 나열했지만, 이것이 왜 내 자신의 학습 (그리고 온전한)을 위해 작동하지 않는지 이해하고 싶습니다.

내가 본 다른 방법은 다음과 같습니다.

1) REPLACE. 이 쿼리를 사용하려고하는 일부 영역에서는 수백만 개의 행이 있고 중복이있을 가능성이 큽니다. 위의 구문과 효율성면에서 비교할 수있는 경우에만 REPLACE를 사용하려고합니다. 이견있는 사람?

2) INSERT IGNORE. 이것을 사용할 가치가 있습니다. tblSites는 현재 (siteId, name, homepage) 있습니다. 나는 고유 한 ID로 홈페이지를 만들 수 있었고 이것이 작동 할 것이라고 믿었지만 (?), tblContentSites (siteId, contentId)를 복합 키 siteId +와 함께 사용하여이 테이블을 tblContent (사이트의 콘텐츠) ContentId. 나는 정수 테이블 ID가 반복적으로 그 접합점 테이블에서 홈페이지보다 더 좋을 것이라고 느꼈다. 이것에 대한 생각을 고맙게 생각합니다.

3) 중복 키 업데이트 - 이것은 행을 복제하는 것처럼 보이지만 새 ID를 다른 ID로 지정하는 것입니다. 이는 어쨌든 데이터를 복제하는 것과 마찬가지이며 내 문제가 발생할 수 있습니다. 나는 이것의 사용을 오해하고 있는가? DUPLICATE KEY UPDATE 후에 수행 할 작업의 유연성이 더 듭니까?

많은 감사,

드류

+0

어디 구문 오류 어느 하나를받을 수 있나요? 오류를 붙여 넣으십시오. –

+0

SQL 구문에 오류가 있습니다. 올바른 구문을 찾으려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 1 행의 '존재하지 않는 곳 (SELECT * FROM tblSites where homepage ='www.a.com ')'근처에서 사용하십시오. – user3535031

답변

2

두 단계 :

  1. (아직 수행하지 않은 경우) homepage 열에 대한 고유 제한 조건을 추가

    ALTER TABLE `tblSites` ADD UNIQUE(`homepage`) 
    
  2. INSERT IGNORE을 사용하면 삽입하지 않을 경우에만 삽입 할 수 있습니다. 갈등이있다.

    INSERT IGNORE INTO `tblSites` (`site`, `homepage`) VALUES ('A','www.a.com'); 
    
+0

Thanks Jack. tblContentSites에서 홈페이지로 ID를 사용하는 것에 대한 나의 우려가 정당화되지 않는다고 말하는 것입니까? – user3535031

+0

@ user3535031 Jack은 기본 키를 변경하지 않고 "이 열은 고유합니다"라는 테이블에 새로운 제약 조건을 추가합니다. –

+0

아, 알겠습니다, 감사합니다! 나는 아직도 당신이 그것에 대한 아이디어가 있다면 현재의 문법이 작동하지 않는 이유를 알고 싶지만 Jack의 방법을 사용하는 것에는 금이 갈 것이다. – user3535031

관련 문제