MySQL-삽입 오류 무시 : 중복 항목
저는 PHP에서 일하고 있습니다.
고유 한 필드가있는 DB에 새로운 레코드를 삽입하는 올바른 방법은 무엇입니까? 많은 레코드를 일괄 적으로 삽입하고 새 레코드를 삽입하고 중복 항목에 대한 오류를 원하지 않습니다.
먼저 SELECT를 만들고 INSERT 전에 항목이 이미 있는지 확인하고 SELECT가 레코드를 반환하지 않는 경우에만 INSERT하는 방법이 있습니까? 내가하지 희망.
어떻게 든 MySQL에게 오류없이 이러한 삽입을 무시하도록 지시하고 싶습니다.
감사합니다
중복 레코드가있을 때 아무 조치도 취하지 않으려면 INSERT ... IGNORE 구문을 사용할 수 있습니다 .
이전 레코드를 동일한 키를 가진 새 레코드로 덮어 쓰 려면 REPLACE INTO 구문을 사용할 수 있습니다 .
또는 중복이 발생한 경우 대신 레코드에 대한 업데이트를 수행하려는 경우 INSERT ... ON DUPLICATE KEY UPDATE 구문을 사용할 수 있습니다 .
편집 : 몇 가지 예를 추가 할 것이라고 생각했습니다.
예
tbl
두 개의 열로 이름이 지정된 테이블이 id
있고 value
. 하나의 항목, id = 1 및 value = 1이 있습니다. 다음 명령문을 실행하는 경우 :
REPLACE INTO tbl VALUES(1,50);
ID = 1 값 = 50 인 레코드가 하나 있습니다. 그러나 전체 레코드가 먼저 삭제 된 다음 다시 삽입되었습니다. 그때:
INSERT IGNORE INTO tbl VALUES (1,10);
작업이 성공적으로 실행되지만 아무것도 삽입되지 않습니다. 여전히 id = 1이고 value = 50입니다. 드디어:
INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;
이제 id = 1이고 value = 200 인 단일 레코드가 있습니다.
EXISTS 조건을 사용하여 중복 정보를 삽입하지 않도록 할 수 있습니다.
예를 들어 기본 키가 client_id 인 clients라는 테이블이있는 경우 다음 문을 사용할 수 있습니다.
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);
이 문은 하위 선택으로 여러 레코드를 삽입합니다.
단일 레코드를 삽입하려면 다음 문을 사용할 수 있습니다.
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);
이중 테이블을 사용하면 값이 현재 테이블에 저장되어 있지 않더라도 select 문에 값을 입력 할 수 있습니다.
에서 http://www.techonthenet.com/sql/insert.php
트리거 를 사용할 수 있습니다 .
트리거에 대한이 소개 가이드 도 확인하십시오 .
고유 제약 조건없이 중복 테이블, 가급적 임시 테이블을 만들고 해당 테이블에 대량로드를 수행하십시오. 그런 다음 임시 테이블에서 고유 (DISTINCT) 항목 만 선택하고 대상 테이블에 삽입하십시오.
$duplicate_query=mysql_query("SELECT * FROM student") or die(mysql_error());
$duplicate=mysql_num_rows($duplicate_query);
if($duplicate==0)
{
while($value=mysql_fetch_array($duplicate_query)
{
if(($value['name']==$name)&& ($value['email']==$email)&& ($value['mobile']==$mobile)&& ($value['resume']==$resume))
{
echo $query="INSERT INTO student(name,email,mobile,resume)VALUES('$name','$email','$mobile','$resume')";
$res=mysql_query($query);
if($query)
{
echo "Success";
}
else
{
echo "Error";
}
else
{
echo "Duplicate Entry";
}
}
}
}
else
{
echo "Records Already Exixts";
}
참고 URL : https://stackoverflow.com/questions/812437/mysql-ignore-insert-error-duplicate-entry
'IT TIP' 카테고리의 다른 글
IntelliJ에서 Maven 용 Java 버전을 변경하는 방법은 무엇입니까? (0) | 2020.10.23 |
---|---|
이 문이 StackOverflowError를 발생시키지 않는 이유는 무엇입니까? (0) | 2020.10.23 |
분기 예측 자에게 분기를 따를 가능성이 얼마나됩니까? (0) | 2020.10.23 |
JSON에 대한 JavaScript 연관 배열 (0) | 2020.10.23 |
Swift에서 JSON 문자열을 Object로 변환하는 간단하고 깨끗한 방법 (0) | 2020.10.23 |