sourcecode

mysql 데이터베이스에 중복 입력을 방지하는 가장 좋은 방법

codebag 2023. 9. 20. 20:19
반응형

mysql 데이터베이스에 중복 입력을 방지하는 가장 좋은 방법

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

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

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

그러면 중복이 있을 때 하고 싶은 일을 정해야 합니다.해야 할 일:

  1. 무시해요?

    INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
    
  2. 이전에 입력한 레코드를 덮어쓰시겠습니까?

    INSERT INTO thetable (pageid, name, somefield)
    VALUES (1, "foo", "first")
    ON DUPLICATE KEY UPDATE (somefield = 'first')
    
    INSERT INTO thetable (pageid, name, somefield)
    VALUES (1, "foo", "second")
    ON DUPLICATE KEY UPDATE (somefield = 'second')
    
  3. 카운터 업데이트?

    INSERT INTO thetable (pageid, name)
    VALUES (1, "foo"), (1, "foo")
    ON DUPLICATE KEY UPDATE (pagecount = pagecount + 1)
    

mysql: INSERT IGNERT INTO TABLE...에서 오류를 무시할 수도 있습니다.키 오류를 무시하고 해당 삽입을 건너뛰고 다음 단계로 넘어갑니다.

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
   }
}

어느 쪽이든 당신은 잘 될 겁니다

페이지를 설정할 수 있습니다.MySQL 데이터베이스의 ID 및 Name to a Unique 인덱스입니다.이렇게 하면 행을 삽입할 때 오류가 발생하여 PHP에서 무시할 수 있으며 다음 행으로 이동하면 됩니다.

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

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

언급URL : https://stackoverflow.com/questions/2219786/best-way-to-avoid-duplicate-entry-into-mysql-database

반응형