2011-01-31 4 views
4

웹 응용 프로그램 프로젝트에서 작업 중이며 데이터가 테이블에 저장되어 있어야하는 다소 큰 HTML 양식이 있습니다. 양식과 삽입은 이미 완료되었지만 고객이 저장된 데이터를 HTML 양식으로 다시로드하여 변경할 수 있기를 원합니다. 다시 말하지만, 이것은 문제가되지 않지만 업데이트를 수행 할 때 질문을하게됩니다. , 그냥 삽입 쿼리를 유지하고 편집하는 경우 이전 행을 삭제하는 것이 적절할까요?MySQL 업데이트와 INSERT 및 DELETE

기본적으로 양식이 제출되면 모든 데이터가 INSERT를 사용하여 테이블에 저장되고 기존 필드가 업데이트되는 경우 기본 키 ID가 포함 된 edit 플래그도 있습니다. . 업데이트 기능을 두 가지 방법으로 처리 할 수 ​​있습니다.

a) 모든 필드/데이터 세트로 실제 업데이트 쿼리를 만들고 if/else를 사용하여 업데이트를 실행할지 또는 쿼리를 삽입할지 결정하십시오.

b) 매번 삽입합니다. 단, 삽입이 성공하면 DELETE WHERE 행 = editID에 한 줄을 추가하십시오.

삽입이 성공한 경우에만 삭제가 발생하므로 삽입하지 않고 데이터를 삭제할 위험이 없으므로 데이터가 손실되지만 INSERT/DELETE는 두 가지 쿼리이므로 단지 효율성이 떨어집니다 if/else를 사용하여 삽입 또는 업데이트를 실행할 것인지 결정하십시오.

자동 증가 ID를 외래 키로 사용하는 두 번째 테이블이 있지만 양식이 제출 될 때마다이 테이블을 업데이트해야하므로 테이블 A의 행을 삭제하면 삭제됩니다. 테이블의 관련 행 b. 이것은 나쁜 프로그래밍 실습처럼 보입니다. 그래서 나는 옵션 a)에 기대고 있습니다. 그러나 어쨌든 단일 라인 옵션을 사용하는 것은 매우 유혹적입니다. DELETE는 기본적으로 다음과 같습니다. 사실 나쁜 프로그래밍 습관이 될 것입니까? 컨벤션을 제외하고, 이것이 "결코 그렇게하지 않는"어떤 이유가 있습니까? 코드 유형?

if ($insertFormResults) { 
     $formId = mysql_insert_id(); 
     echo "Your form was saved successfully."; 
     if(isset($_POST['edit'])){ 
      $query = "DELETE FROM registerForm WHERE id='$_POST[edit]'"; 
      $result = mysql_query($query); 
     } 
    } 
+1

[MySQL의 LAST_INSERT_ID] (http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html)를 사용하면 자동 증가 값을 얻을 수 있습니다. UPDATE 문. 삭제하면 참조 무결성에 영향을 미치지 않으면 서 자동 증가 값이 불필요하게 증가합니다. –

답변

3

을 경우 (스위치)를 사용하는 나는 그것을 반대 권하고 싶습니다 :

  • 않는 한 을 하나의 트랜잭션으로 묶거나 INSERT/DELETE를 저장된 프로 시저로 캡슐화하는 것이 좋습니다. 복제 누적의 위험이 있습니다. 당신이 SP 또는 트랜잭션을 사용하는 경우는 그냥 효과적으로 분명히 비효율적 인 UPDATE 문을 다시 작성하고 또한 나중에 코드를 유지 누군가에 의해 WTF가 눈썹을 제기 몇 가지에 상승을 줄 것입니다.
  • 귀하의 경우에 문제와 유사하게 보이지는 않지만 잠재적으로 참조 번호 에 영향을 미칠 수 있습니다. 또한 쉽게 쓸모있는 능력을 잃어 버리고 있습니다. 레코드를 생성 순서대로 검색합니다.
  • 아마 아닐 좋은 작은 응용 프로그램에 대한 고려,하지만 당신은 이 상당히 빨리 데이터 검색 속도가 느려집니다 이는 심각하게 조각난 데이터베이스로 끝날 것입니다.
+0

내 대학에서 신입생 오리엔테이션을위한 데이터베이스이므로 들어오는 클래스 크기에 따라 매년 최소 1000 개의 새로운 항목이 있습니다. 나는 분열을 고려하고 있지 않았고, 그것은 분명히 문제를 일으킬 것입니다. – awestover89

+1

@ awestover89 - 그럼 제대로 일을하는 것이 합리적입니다. 개인적으로 이런 것들을 가지고 나는 보통 첫 번째 것에 동기를 부여 받는다. * 누가 나에게 WTF 순간을 보낸다. 당신의 평판은 중요하며 비록 당신이 어떻게 코드를 작성하든 관계없이 당신을 비판 할 사람이 될 것입니다 (어쩌면 그들이 이상한 일을하기 때문에) 표준 작업을 위해 이상한 구조를 사용하여 변명하지 않는 것이 낫습니다. – Cruachan

+0

Cruachan에 동의합니다. 기본적으로 ** 업데이트는 "새로운 것을 삽입하고 이전 것을 삭제"합니다. 1) 원자 적 연산입니다. 2) 동일한 ID를 유지합니다. 3) MySQL이 기본적으로 이것을 이해하는 방법이며 4) 방법입니다. 다른 사람들은 그렇게합니다. 3과 4는 모두 중요합니다. MySQL은 표준 방식으로 일을 수행하는 데 가장 최적화됩니다. 그리고 절대적으로 다음 프로그래머는 "업데이트"를 더 빨리 이해할 것입니다. 명확한 이유가있을 때만 비표준 방식으로 작업을 수행하고 주석에서 설명 할 수 있습니다. –

0

업데이트는 서버로 왕복하는 것이 더 효율적입니다. 잘못된 데이터의 가능성이있는 이유가없는 한 항상 UPDATE를 사용하는 것이 기본값입니다.

0

나는 삭제를하는 것이 무의미하다고 생각합니다. MySql에서 업데이트를 실행하면 이미 저장된 것과 다른 경우에만 레코드를 업데이트합니다. 삭제를 수행해야하는 이유가 있습니다. 대신. 나는 보통 완벽하게 잘 작동 옵션을 삭제/삽입하는 동안, 사용자로부터 호출을 삭제/업데이트를 잡으려고

<?php 
switch (action) { 

case "delete" : 
block of coding; 
if the condition equals value1; 
break; 

case "edit" : 
block of coding; 
if the condition equals value2; 
break; 

} 
?>