>데이터 베이스 >MySQL 튜토리얼 >IOS 데이터베이스 업그레이드 및 데이터 마이그레이션의 자세한 예

IOS 데이터베이스 업그레이드 및 데이터 마이그레이션의 자세한 예

小云云
小云云원래의
2017-12-25 14:09:072005검색

이 글은 주로 IOS 데이터베이스 업그레이드 및 데이터 마이그레이션의 세부 사례에 대한 관련 정보를 소개합니다. 다음은 데이터베이스 업그레이드 및 데이터 마이그레이션 문제를 해결하는 데 도움이 되는 사례입니다. 모두에게 도움이 되기를 바랍니다.

IOS 데이터베이스 업그레이드 데이터 마이그레이션 상세 예

요약:

오래전 데이터베이스 버전 업그레이드 참고 시나리오를 접했을 때 당시의 접근 방식은 단순히 기존 데이터베이스 파일을 삭제하고 재구축하는 것이었습니다. 데이터베이스와 테이블 구조가 너무 폭력적이어서 오래된 데이터가 손실될 수 있습니다. 이제는 새 프로젝트에서 데이터베이스를 사용하므로 이 문제를 다시 생각해 봐야 할 것 같습니다. 이 문제를 해결하기 위해 좀 더 우아한 방법을 사용하면 앞으로는 비슷한 시나리오에 직면하게 될 것입니다.

이상적인 상황은 데이터베이스 업그레이드, 테이블 구조, 기본 키 및 제약 조건 변경입니다. 그러나 새 테이블 구조가 설정된 후 데이터는 이전 테이블에서 자동으로 검색되고 동일한 필드가 매핑되고 마이그레이션됩니다. 대부분의 기업 이 시나리오의 데이터베이스 버전 업그레이드에는 필드를 추가하거나 빼고 기본 키 제약 조건을 수정하는 작업만 포함되므로 아래에 구현되는 솔루션도 가장 기본적이고 일반적으로 사용되는 비즈니스 시나리오를 기반으로 한 구현입니다. 귀하의 기대에 부응하기 위해 여기에서 확장할 수 있습니다.

선택 및 마무리

온라인에서 검색한 결과 데이터베이스 업그레이드 및 데이터 마이그레이션에 대한 간단하고 완전한 솔루션은 없으며 몇 가지 아이디어를 찾았습니다

1. 오래된 데이터를 지우고 테이블을 다시 빌드합니다.

장점: 단순
단점: 데이터 손실

2. 기존 테이블을 기반으로 테이블 구조 수정

장점: 데이터 유지 가능
단점: 규칙이 번거롭기 때문에 데이터베이스 필드 구성 파일을 만든 다음 구성 파일을 읽고 수행해야 합니다. SQL 수정 테이블 구조, 제약 조건, 기본 키 등 여러 버전에 걸쳐 데이터베이스를 업그레이드하면 번거롭고 번거로워집니다

3. 임시 테이블을 생성하고 기존 데이터를 임시 테이블에 복사한 후 삭제합니다. 이전 데이터 테이블을 삭제하고 임시 테이블을 데이터 테이블로 설정합니다.

장점: 데이터를 유지하고, 테이블 구조 수정, 제약 조건 및 기본 키 변경을 지원할 수 있으며, 구현이 비교적 간단합니다.
단점: 모든 것을 고려하면 구현 단계가 많습니다. 방법이 더 안정적인 솔루션입니다.

주요 단계

이 아이디어에 따라 데이터베이스 업그레이드를 분석했으며 주요 단계는 다음과 같습니다.

데이터베이스에서 기존 테이블 가져오기
  • 테이블 이름을 수정하고 접미사 "를 추가합니다. _bak", 이전 테이블 교체 해당 테이블은 백업 테이블로 사용됩니다
  • 새 테이블 생성
  • 새로 생성된 테이블 가져오기
  • 기존 테이블과 새 테이블을 순회하여 비교 및 ​​추출 마이그레이션이 필요한 테이블의 필드
  • 데이터 마이그레이션 처리
  • 백업 테이블 삭제

  • 사용된 SQL 문 분석
이 작업은 데이터베이스 작업과 관련되므로 문제의 핵심은 해당 단계에 해당하는 SQL문은 아래와 같이 분석된다. | name | tbl_name | rootpage | sql. 데이터베이스 이름 필드인 이름만 사용하면 됩니다.

SELECT * from sqlite_master WHERE type='table'

접미사 "_bak"를 추가하고 이전 테이블을 백업으로 사용하세요. table


sqlite> SELECT * from sqlite_master WHERE type='table'
 ...> ;
+-------+---------------+---------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| type | name   | tbl_name  | rootpage | sql                                                     |
+-------+---------------+---------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| table | t_message_bak | t_message_bak | 2  | CREATE TABLE "t_message_bak" (messageID TEXT, messageType INTEGER, messageJsonContent TEXT, retriveTimeString INTEGER, postTimeString INTEGER, readState INTEGER, PRIMARY KEY(messageID))        |
| table | t_message  | t_message  | 4  | CREATE TABLE t_message (
 messageID TEXT, 
 messageType INTEGER,
 messageJsonContent TEXT, 
 retriveTimeString INTEGER, 
 postTimeString INTEGER, 
 readState INTEGER, 
 addColumn INTEGER,
 PRIMARY KEY(messageID)
) |
+-------+---------------+---------------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 行于数据集 (0.03 秒)

테이블 필드 정보 가져오기


-- 把t_message表修改为t_message_bak表 
ALTER TABLE t_message RENAME TO t_message_bak

얻은 테이블 필드 정보는 다음과 같습니다. | cid | name | dflt_value | 필드의 경우 필드 이름인 이름만 사용하면 됩니다. field


-- 获取t_message_bak表的字段信息
PRAGMA table_info('t_message_bak')

데이터 마이그레이션 처리에 하위 쿼리 사용


sqlite> PRAGMA table_info('t_message_bak');
+------+--------------------+---------+---------+------------+------+
| cid | name    | type | notnull | dflt_value | pk |
+------+--------------------+---------+---------+------------+------+
| 0 | messageID   | TEXT | 0  | NULL  | 1 |
| 1 | messageType  | INTEGER | 0  | NULL  | 0 |
| 2 | messageJsonContent | TEXT | 0  | NULL  | 0 |
| 3 | retriveTimeString | INTEGER | 0  | NULL  | 0 |
| 4 | postTimeString  | INTEGER | 0  | NULL  | 0 |
| 5 | readState   | INTEGER | 0  | NULL  | 0 |
+------+--------------------+---------+---------+------------+------+
6 行于数据集 (0.01 秒)

messageID, messageType, messageJsonContent, retriveTimeString, postTimeString 값 복사 , t_message_bak 테이블의 상태를 t_message 테이블로 읽어보세요


코드 구현


그런 다음 코드 구현 단계가 옵니다


INSERT INTO t_message(messageID, messageType, messageJsonContent, retriveTimeString,
 postTimeString, readState) SELECT messageID, messageType, messageJsonContent, retriveTimeString,
 postTimeString, readState FROM t_message_bak

관련 권장 사항:

sql 2005 데이터베이스 업그레이드 2008 데이터베이스 및 2005 데이터 첨부 2 008 데이터 백업 기사

SQL 서버 데이터베이스 업그레이드 버전 문제 해결


Oracle 데이터베이스를 MySQL로 마이그레이션하는 방법 상세 요약(그림 및 텍스트)

위 내용은 IOS 데이터베이스 업그레이드 및 데이터 마이그레이션의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.