문제

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);

듀얼 테이블을 사용하면 값이 현재 테이블에 저장되지 않더라도 일부 명령문에 값을 입력 할 수 있습니다.

~에서 http://www.techonthenet.com/sql/insert.php

고유 한 제약 조건이없는 중복 테이블, 바람직하게는 임시 테이블을 만들고 해당 테이블에 벌크로드를 수행하십시오. 그런 다음 임시 테이블에서 고유 한 항목 만 선택하고 대상 테이블에 삽입하십시오.

$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";
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top