MySQL에 '존재하지 않으면 삽입'하는 방법?
PHPMySQL에 '존재하지 않으면 삽입'하는 방법?
나는 인터넷 검색으로 시작하여 뮤텍스 테이블에 대해 이야기하는이 기사를 발견했다.
1400 만 레코드가있는 테이블이 있습니다. 동일한 형식으로 더 많은 데이터를 추가하려는 경우 삽입하려는 레코드가 이미 존재하지 않는지 확인하는 방법이 있습니다 (즉, 한 쿼리를 확인하고 한 쿼리를 삽입하면 결과 집합이됩니다). 빈)?
필드에 대한 고유 한 제한 조건으로 인서트가 이미 존재하면 실패 할 것입니까?
그것은 단지 제약 조건과 함께, 내가 PHP를 통해 삽입을 발행하면, 스크립트가 울부 짖는 것 같습니다.
해결법
-
==============================
1.
INSERT IGNORE INTO 테이블을 사용하십시오.
http://bogdan.org.ua/2007/10/18/mysql-insert-if-not-exists-syntax.html을 참조하십시오.
INSERT ... DUPLICATE KEY UPDATE 문법에 대해서, dev.mysql.com에 대한 설명을 찾을 수 있습니다.
Google의 웹 캐시에 따라 bogdan.org.ua에서 게시 :
-
==============================
2.
INSERT INTO `table` (value1, value2) SELECT 'stuff for value1', 'stuff for value2' FROM `table` WHERE NOT EXISTS (SELECT * FROM `table` WHERE value1='stuff for value1' AND value2='stuff for value2') LIMIT 1
또는 외부 SELECT 문은 테이블이 처음 비어있는 경우를 처리하기 위해 DUAL을 참조 할 수 있습니다.
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
-
==============================
3.
중복 키 업데이트 또는 삽입 무시는 MySQL과 함께 실행 가능한 솔루션이 될 수 있습니다.
mysql.com을 기반으로 한 중복 키 업데이트 예제
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;
삽입 무시의 예는 mysql.com을 기반으로합니다.
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] ... ]
-
==============================
4.
예외가 용인 될 수있는 경우 모든 간단한 제약 조건이 작업을 수행해야합니다. 예 :
죄송합니다, 이것은 현혹 적으로 단순 해 보입니다. 나는 당신이 우리와 공유하는 링크에 직면 해 있다고 생각합니다. ;-(
그러나 나는 당신의 필요를 채울 것 같기 때문에이 답을 절대로주지 않습니다. (그렇지 않은 경우 "좋은 물건"(TM)이라고도 함) 요구 사항을 업데이트 할 수 있습니다.
편집 : 삽입이 데이터베이스 고유 제한 조건을 위반하면 데이터베이스 수준에서 예외가 발생하고 드라이버가 중계합니다. 실패로 인해 스크립트를 확실히 중단합니다. 그 사건을 해결하려면 PHP에서 가능해야합니다 ...
-
==============================
5.
REPLACE INTO `transcripts` SET `ensembl_transcript_id` = 'ENSORGT00000000001', `transcript_chrom_start` = 12345, `transcript_chrom_end` = 12678;
레코드가 있으면 덮어 씁니다. 아직 존재하지 않으면 생성 될 것입니다.
-
==============================
6.
다음은 지정된 모든 컬럼 값이 테이블에없는 경우에만 행을 삽입하는 PHP 함수입니다.
사용 예 :
<?php insert_unique('mytable', array( 'mycolumn1' => 'myvalue1', 'mycolumn2' => 'myvalue2', 'mycolumn3' => 'myvalue3' ) ); ?>
-
==============================
7.
다음을 시도하십시오.
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
-
==============================
8.
교체 작업이 도움이 될 수 있습니다.
-
==============================
9.
시험:
// 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 } }
이 방법은 빠르고 쉽습니다. 큰 테이블 INDEX 열 'xxx'에서 쿼리의 속도를 향상시키기 위해 (필자의 예에서는).
-
==============================
10.
ON DUPLICATE KEY 또는 INSERT IGNORE를 사용하여 확인할 수있는 UNIQUE 색인이있는 경우이를 해결하는 방법에 대한 몇 가지 해답이 있습니다. 항상 그런 것은 아니며 UNIQUE에 길이 제한 (1000 바이트)이 있으므로이를 변경할 수 없습니다. 예를 들어, WordPress (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은 해당 데이터 셋이 없을 때 효과가없는 일반 UPDATE 쿼리입니다. 쿼리 2는 NOT EXISTS에 의존하는 INSERT입니다. 즉 INSERT는 데이터 집합이 존재하지 않을 때만 실행됩니다.
from https://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
PHP를 사용하여 이메일을 보내는 방법은 무엇입니까? (0) | 2018.09.01 |
---|---|
자바 스크립트 변수에 PHP 문자열 전달 (그리고 개행 문자 이스케이프) [duplicate] (0) | 2018.09.01 |
PHP에서 클라이언트 IP 주소를 얻는 방법? (0) | 2018.09.01 |
PHP로 HTML + CSS를 PDF로 변환 하시겠습니까? [닫은] (0) | 2018.09.01 |
프로젝트 링크가 Wamp 서버에서 작동하지 않습니다. (0) | 2018.09.01 |