Thinkphp3.2에서 동일한 데이터를 삽입하는 문제를 완벽하게 해결

不言
풀어 주다: 2023-03-30 11:50:01
원래의
2500명이 탐색했습니다.

다음 기사에서는 Thinkphp3.2에서 동일한 데이터를 삽입하는 문제에 대한 완벽한 솔루션을 제공합니다. 내용이 꽤 괜찮아서 지금 공유해서 참고용으로 올려드리겠습니다.

문제 설명

오늘 TP3.2를 사용하여 데이터를 삽입할 때 동일한 데이터(소위 동일 데이터라고 함)의 삽입을 피하기 위해 기본 키가 동일하거나 고유 인덱스의 필드가 동일), 제가 만든 인덱스는 다음 그림과 같습니다. 기본 키 인덱스는 자동 증가 필드이므로 중복이 불가능합니다. 즉, 고유 인덱스가 중복될 수 있습니다. , 연도, 산, 일이 동일할 경우 현재 기록이 업데이트됩니다.

문제 해결

이전에 이 문제에 직면했을 때, 우리는 MySQL이 이 문제를 해결하기 위해 ON DUPLICATE KEY UPDATE 또는 REPLACE INTO를 제공한다는 것을 알고 있습니다.

ON DUPLICATE KEY UPDATE를 사용하세요

데이터를 삽입하기 전에는 아래와 같이 테이블에 레코드가 하나만 있습니다.

레코드를 삽입할 때 다음과 같은 경우 SQL 문은 다음과 같습니다. 테이블의 기존 레코드인 경우 레코드를 업데이트합니다. 그렇지 않으면 레코드가 삽입됩니다.

INSERT INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 3, 1) 
ON DUPLICATE KEY 
UPDATE 
`status` = 
VALUES
(`status`),
`updated_ts` = NOW();
로그인 후 복사

REPLACE INTO

사용

다음 코드를 다시 실행하면 위에 삽입된 코드가 업데이트됩니다

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 1)
로그인 후 복사

효과는 아래와 같습니다

ON DUPLICATE KEY UPDATE와 REPLACE INTO의 차이점

동일한 값이 나타나면 ON DUPLICATE KEY UPDATE는 기존 레코드를 업데이트하고 REPLACE INTO는 이전 레코드를 삭제하고 새 레코드를 삽입합니다.

Thinkphp3.2의 솔루션

Thinkphp3.2에서는 동일한 데이터를 삽입하는 문제를 add() 함수의 세 번째 매개변수를 통해 처리합니다.

Model.class.PHP의 add() 메소드는 Db.class.php의 insert 메소드를 호출합니다. insert 메소드에서 다음 코드를 볼 수 있습니다:

여기서 $replace는 add입니다. 메서드의 세 번째 매개변수입니다.

관련 권장 사항:

thinkphp3.2.3 버전 데이터베이스 추가, 삭제, 수정 및 구현 코드 확인

위 내용은 Thinkphp3.2에서 동일한 데이터를 삽입하는 문제를 완벽하게 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿