programing

예기치 않은 AUTO_INCRECTION 동작

newnotes 2023. 9. 7. 22:00
반응형

예기치 않은 AUTO_INCRECTION 동작

PHP 5.6.7, mariadb 10.0.17-MariaDB를 실행하는 서버가 있습니다.CodeIgniter 애플리케이션에는 두 개의 테이블이 있습니다.point_trigger그리고.trigger_filter, 에 연결되어 있는.point_trigger_id, 일대 다의둘다.id열을 정수로 설정합니다.AUTO_INCREMENT(따라서 복합 키가 없습니다.)이것이 그가 겪은 일입니다.

  1. 고객이 그 중 하나를 제거했습니다.point_trigger웹 인터페이스에 의한 s.Sa는 기본적으로 컨트롤러를 불렀고 그 다음에 행을 제거했습니다.point_trigger한 줄(이 경우에는 한 줄만)trigger_filter. 통화 기록은 다음과 같이 끝납니다./delete/235, 라는 뜻으로point_trigger_id삭제할 행을 찾는 데 사용된 다음과 같이 설정되었습니다.235. 지금까지 좋아요.

  2. 며칠 후에 클라이언트는 다시 웹 인터페이스로 이동하여 새로운 것을 추가합니다.point_trigger.

  3. 클라이언트가 호출하는 이유는 자신이 만든 포인트 트리거가 예기치 않게 작동하기 때문입니다.

  4. 데이터베이스를 확인하고...point_trigger테이블에는 ID에 공백이 없습니다. 즉,point_trigger사용자가 만든 ID는 다음과 같습니다.235. 우리는 관련된 것을 확인합니다.trigger_filter테이블과 이 테이블 역시 공백이 없습니다. 이 테이블의 자동 증가 ID는 다음 테이블입니다.

우리가 알고 있는 것(또는 알고 있다고 생각하는 것)은 행을 제거하는 측면에서 삭제추가 모두 정상적으로 진행되었다는 것입니다.저희가 그렇게 생각하는 이유는point_trigger이전 매개변수를 제거한 후 생성된 클라이언트의 매개변수가 다르며, 삭제추가 전에는 편집사항이 기록되지 않았습니다.

그래서 AUTO_INCRECTION을 삭제하고 추가하는 시간 사이에 다시 계산하게 만드는 무언가가 있었습니다.point_trigger. 누가 말해줄 수 있나요? 아니면 그냥 뭐가 될 수 있는지 알려줄 수 있나요?

미리 감사드립니다!

사용자가 만든 ID는 235와 같습니다.

이것이 사건의 연속일까요?

  1. 행을 삽입하고 235개를 할당받습니다.
  2. DELETE 235, MAX(id)=234를 남깁니다.
  3. 셧다운 마리아DB
  4. 스타트업 마리아DB
  5. 행을 넣고 다시 235를 얻습니다.

5단계에 대해 자세히 설명합니다.

  • 테이블 열기 - MAX(id)+1(234+1)을 다음 ID로 찾습니다.AUTO_INCREMENT
  • INSERT는 이제 그 값(235)을 얻습니다.

죄송합니다만, 그렇게 작동합니다.AUTO_INCREMENT모든 시간이 아닌 언제든지 고유성을 보장합니다.

언급URL : https://stackoverflow.com/questions/31409929/unexpected-auto-increment-behaviour

반응형