반응형
mysql 데이터베이스에 중복 입력을 방지하는 가장 좋은 방법
id(pk), pageId(fk), name 등 3열로 된 테이블이 있습니다.pageId와 이름이 같은 약 5000개의 레코드를 테이블에 덤프하는 php 스크립트가 있습니다.pageId와 이름의 조합은 고유해야 합니다.php로 스크립트를 순환할 때 테이블에 중복이 저장되는 것을 방지하는 가장 좋은 방법은 무엇입니까?
첫 번째 단계는 테이블에 고유 키를 설정하는 것입니다.
ALTER TABLE thetable ADD UNIQUE INDEX(pageid, name);
그러면 중복이 있을 때 하고 싶은 일을 정해야 합니다.해야 할 일:
무시해요?
INSERT IGNORE INTO thetable (pageid, name) VALUES (1, "foo"), (1, "foo");
이전에 입력한 레코드를 덮어쓰시겠습니까?
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')
카운터 업데이트?
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
반응형
'sourcecode' 카테고리의 다른 글
WP REST API plugin을 사용하여 YOAST SEO plugin 데이터를 가져오는 방법 ? 특히 wpseo_headhook content (0) | 2023.09.20 |
---|---|
ASP.NET 사이트 맵 (0) | 2023.09.20 |
WordPress, Node, GitLab 및 CLI 사용자 관리 시스템 (0) | 2023.09.20 |
style.xml에서 프로그래밍 방식으로 스타일 속성을 검색하는 방법 (0) | 2023.09.20 |
MySQL 데이터베이스에 많은 양의 히트를 기록하는 모범 사례 (0) | 2023.09.20 |