IT TIP

MySQL-삽입 오류 무시 : 중복 항목

itqueen 2020. 10. 23. 19:51
반응형

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

반응형