MySQL- 삽입 오류를 무시하십시오 : 중복 항목
문제
PHP에서 일하고 있습니다.
독특한 필드를 가진 DB에 새 레코드를 삽입하는 올바른 방법은 무엇입니까? 배치에 많은 레코드를 삽입하고 있으며 새 레코드를 삽입하기를 원하며 중복 항목에 대한 오류를 원하지 않습니다.
먼저 선택을 만들고 삽입 전에 항목이 이미 있는지 확인하고 Select가 레코드가 없을 때만 삽입하는 방법이 있습니까? 내가하지 희망.
어떻게 든 MySQL에 오류없이 이러한 인서트를 무시하라고 말하고 싶습니다.
고맙습니다
해결책
당신이 사용할 수있는 삽입 ... 무시하십시오 중복 레코드가있을 때 조치를 취하지 않으려는 경우 구문.
당신이 사용할 수있는 교체하십시오 구문이 같은 키를 가진 새 레코드로 이전 레코드를 덮어 쓰고 싶다면.
또는 사용할 수 있습니다 중복 키 업데이트에 삽입 ... 구문 중복이 발생할 때 레코드에 대한 업데이트를 수행하려는 경우.
편집 : 몇 가지 예를 추가 할 것이라고 생각했습니다.
예
이름이 지정된 테이블이 있다고 가정 해 봅시다 tbl
두 개의 열로, id
그리고 value
. 하나의 항목, id = 1이고 값 = 1이 있습니다. 다음 진술을 실행하는 경우 :
REPLACE INTO tbl VALUES(1,50);
ID = 1 값 = 50 인 레코드가 여전히 있습니다. 그러나 전체 레코드가 먼저 삭제 된 다음 다시 삽입되었습니다. 그 다음에:
INSERT IGNORE INTO tbl VALUES (1,10);
작업은 성공적으로 실행되지만 아무것도 삽입되지 않습니다. 여전히 ID = 1이고 값 = 50이 있습니다. 드디어:
INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;
이제 id = 1이고 값 = 200 인 단일 레코드가 있습니다.
다른 팁
당신이 사용할 수있는 트리거.
또한 확인하십시오 트리거에 대한이 소개 안내서.
데이터베이스 스키마는 어떻게 생겼습니까?
ID 열을 추가 할 수 있습니다 자동 증가 각 삽입에 대해 고유 한 행을 보장합니다.
질문 : 클라이언트와 데이터베이스를 설정하고 있습니다. "삽입"명령문을 사용하여 데이터베이스에 정보를 삽입하지만 동일한 클라이언트 정보를 다시 입력하지 않도록하려면 어떻게해야합니까?
답변 : Exists 조건을 사용하여 중복 정보를 삽입하지 않도록 할 수 있습니다.
예를 들어, Client_ID의 기본 키가있는 클라이언트라는 테이블이있는 경우 다음 진술을 사용할 수 있습니다.
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);
이 명령문은 SubSelect와 함께 여러 레코드를 삽입합니다.
단일 레코드를 삽입하려면 다음 진술을 사용할 수 있습니다.
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);
듀얼 테이블을 사용하면 값이 현재 테이블에 저장되지 않더라도 일부 명령문에 값을 입력 할 수 있습니다.
고유 한 제약 조건이없는 중복 테이블, 바람직하게는 임시 테이블을 만들고 해당 테이블에 벌크로드를 수행하십시오. 그런 다음 임시 테이블에서 고유 한 항목 만 선택하고 대상 테이블에 삽입하십시오.
$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";
}