이 기사는 내장 마이그레이션 시스템이없는 ThinkPHP의 데이터베이스 스키마 변경을 관리하는 방법에 대해 자세히 설명합니다. 순차적 인 SQL 파일, 실행 및 롤백을위한 사용자 정의 스크립트 및 추적 테이블을 사용하는 것을 제안합니다. 원자를 포함한 모범 사례
ThinkPhp에는 Laravel 또는 다른 프레임 워크와 같은 마이그레이션 시스템이 내장되어 있지 않습니다. 데이터베이스 마이그레이션 기능을 달성하기 위해 원시 SQL 쿼리를 사용하거나 타사 라이브러리를 활용하는 데 의존합니다. Core ThinkPHP 프레임 워크 내에 단일 표준화 된 접근 방식이 없습니다. 그러나 ThinkPHP 응용 프로그램과 함께 관리되는 일반 SQL 파일을 사용하여 일반적인 실용적인 방법을 간략하게 설명 할 수 있습니다.
이 접근법에는 각 마이그레이션 단계마다 별도의 SQL 파일을 작성하는 것이 포함됩니다. 이 파일에는 CREATE TABLE
, ALTER TABLE
, DROP TABLE
및 데이터베이스 스키마를 수정하는 데 필요한 기타 SQL 명령이 포함됩니다. 일반적 으로이 파일의 순차적으로 이름을 지정합니다 (예 : 20231027100000_create_users_table.sql
, 20231027100500_add_email_to_users_table.sql
). 타임 스탬프 접두사는 올바른 실행 순서를 보장합니다.
이러한 마이그레이션을 적용하기 위해 지정된 디렉토리의 SQL 파일을 통해 반복하는 사용자 정의 스크립트 (아마도 ThinkPhP 명령 또는 별도의 PHP 스크립트)를 작성하여 이미 적용되었는지 확인하십시오 (일반적으로 별도의 테이블에서 추적). 적용되지 않은 경우 스크립트는 ThinkPhp의 데이터베이스 연결을 사용하여 해당 SQL 명령을 실행합니다. 이를 위해서는 데이터 무결성을 유지하기 위해 잠재적 오류 및 거래를 신중하게 처리해야합니다.
내장 마이그레이션 시스템이 없어도 모범 사례는 여전히 데이터베이스 스키마를 관리 할 때 효율성과 안정성을 보장하는 데 여전히 적용됩니다.
ALTER TABLE
문을주의 깊게 사용하십시오.migrations
)을 작성하여 어떤 마이그레이션이 성공적으로 적용되었는지 기록하십시오. 이 테이블은 적어도 마이그레이션 파일 이름과 적용시기를 나타내는 타임 스탬프를 저장해야합니다. 롤백 변경하려면 마이그레이션 파일에서 SQL 명령을 되돌리는 메커니즘이 필요합니다. 가장 간단한 접근법은 해당 "롤백"SQL 파일을 만드는 것입니다 (예 : 20231027100000_create_users_table_rollback.sql
). 이 파일에는 해당 마이그레이션 파일의 변경 사항을 취소하는 데 필요한 SQL 명령이 포함됩니다.
마이그레이션 스크립트에는 롤백이 요청 될 때 이러한 롤백 파일을 실행하는 논리가 포함되어야합니다. 마이그레이션 추적 테이블을 읽고, 롤백으로 롤백 할 마이그레이션을 식별하고 (역 순서로) 적절한 롤백 SQL 파일을 실행합니다. 다시 말하지만, 적절한 오류 처리 및 거래가 중요합니다. 또는 일부 데이터베이스 시스템은 특정 ALTER TABLE
문을 역전시킬 수 있습니다. 그러나 이것은 보편적으로 신뢰할 수 없으며 명백한 롤백 스크립트를 만드는 것이 일반적으로 더 안전합니다.
예, 다른 환경을 관리하기 위해 위에서 설명한 접근법을 조정할 수 있습니다. 핵심은 환경에 따라 다른 SQL 명령을 조건부로 실행하는 별도의 마이그레이션 파일 세트 또는 메커니즘을 갖는 것입니다.
한 가지 방법은 각 환경의 마이그레이션 파일 (예 : migrations/development
, migrations/testing
, migrations/production
)에 대해 별도의 디렉토리를 유지하는 것입니다. 마이그레이션 스크립트는 환경 변수 또는 구성 설정에 따라 적절한 디렉토리를 대상으로합니다.
다른 접근법은 마이그레이션 SQL 파일 자체 내에서 조건부 로직을 사용하는 것입니다. 주석 또는 전처리 서자 지시문을 사용하여 환경에 따라 특정 SQL 명령을 조건부로 포함하거나 제외 할 수 있습니다. 그러나이를 통해 마이그레이션 파일을 읽기 쉽고 유지하기가 더 어려워 질 수 있습니다. 환경 별 마이그레이션 디렉토리를 사용하는 것이 일반적으로 더 나은 조직과 명확성을 위해 선호됩니다. 마이그레이션 추적 테이블은 환경에 관계없이 마이그레이션의 적용을 추적하여 모든 환경에서 이상적으로 일관성이 있어야합니다.
위 내용은 ThinkPhp의 데이터베이스 마이그레이션을 사용하여 데이터베이스 스키마 변경을 관리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!