복붙노트

가장 좋은 방법은 mysql 데이터베이스에 중복 항목을 피하기 위해

PHP

가장 좋은 방법은 mysql 데이터베이스에 중복 항목을 피하기 위해

id (pk), pageId (fk), name의 3 개의 열이있는 테이블이 있습니다. 나는 같은 페이지 ID와 이름으로 약 절반이 중복되는 테이블에 약 5000 개의 레코드를 덤프하는 PHP 스크립트를 가지고있다. pageId와 name의 조합은 고유해야합니다. PHP에서 스크립트를 반복하면서 중복 된 테이블에 저장되는 것을 방지하는 가장 좋은 방법은 무엇입니까?

해결법

  1. ==============================

    1.첫 번째 단계는 테이블에 고유 한 키를 설정하는 것입니다.

    첫 번째 단계는 테이블에 고유 한 키를 설정하는 것입니다.

    ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);
    

    그런 다음 복제본이있을 때 원하는 것을 결정해야합니다. 당신은해야합니까?

  2. ==============================

    2.mysql의 에러를 무시할 수도있다 : INSERT IGNORE INTO TABLE ... 키 에러를 무시하고 그 삽입을 건너 뛰고 다음으로 넘어 간다.

    mysql의 에러를 무시할 수도있다 : INSERT IGNORE INTO TABLE ... 키 에러를 무시하고 그 삽입을 건너 뛰고 다음으로 넘어 간다.

  3. ==============================

    3.PageID 및 Name을 MySQL 데이터베이스의 고유 인덱스로 설정할 수 있습니다. 이 방법으로 행을 삽입하면 PHP에서 무시할 수있는 오류가 발생하고 다음 행으로 넘어갈 수 있습니다.

    PageID 및 Name을 MySQL 데이터베이스의 고유 인덱스로 설정할 수 있습니다. 이 방법으로 행을 삽입하면 PHP에서 무시할 수있는 오류가 발생하고 다음 행으로 넘어갈 수 있습니다.

    행을 개별적으로 삽입한다고 가정합니다. AKA :

    foreach($large_data as $fields)
    {
        mysql_query("INSERT INTO TABLE (`Something`) VALUES('".$fields['something']."');
    }
    
  4. ==============================

    4.당신이 할 수있는 mysql 지점에서

    당신이 할 수있는 mysql 지점에서

    alter table YOURTABLE add unique index(pageId, name);
    

    귀하의 말씨가 정확하고 당신이 할 수있는 PHP에서 그것을하고 싶다면

    $already_done = array();
    foreach ($records as $record)
    {
       $unique_hash = md5($record['name'].$record['pageId']);
       if (!in_array($unique_hash, $already_done))
       {
          $already_done[] = $unique_hash;
          // sql insert here
       }
    }
    

    어느 쪽이든 당신을 잘해야합니다.

  5. from https://stackoverflow.com/questions/2219786/best-way-to-avoid-duplicate-entry-into-mysql-database by cc-by-sa and MIT license