2013-04-10 2 views
0

SQLite 데이터베이스를 사용하고 있습니다. drop/rename/reorder 컬럼은 SQLite에서 (alter table 명령어를 사용하여) 지원되지 않기 때문에, 나는 다음과 같은 태스크를 위해 커스터마이징 된 메소드를 작성하고있다 : (기존 테이블의 백업을 취한 다음 요구 사항이 일치하는 새 테이블을 생성하는 등) 다른 여러 스레드에서 설명됩니다. 가 열을 REORDER의 열을 추가 DROP 열 RENAME (열 및 데이터 유형) : 다음Sqlite : 열 및 데이터 형식 이름 바꾸기

DB를 운영합니다.

이러한 작업을 어떤 순서로 수행해야합니까? 내 혼란은 주로 열을 바꾸거나 다른 방법으로 바꾸기 전에 드롭해야하는지 여부와 관련이 있습니다.

또한 데이터 유형 및 데이터 이동과 같은 열 이름을 바꾸는 방법에 대한 몇 가지 지침이 필요합니까?

의견이 있으십니까?

답변

0

먼저 다음 지침 중 문제가 발생하면 데이터베이스 백업을 만듭니다.

조작 순서는 CREATE newtable, INSERT INTO newtable, DROP oldtable이어야합니다.

올바른 열 이름과 각 열에 대한 데이터 형식을 사용하여 새 테이블을 만듭니다. 그럼 그냥 같은 것을 할 :

INSERT INTO new_table(columns, ...) 
(SELECT columns, ... 
FROM old_table) 

당신은 새로운 데이터 타입은 기존의 데이터 유형 직접 호환되지 않는 경우 다른 데이터 유형에 캐스트를 수행해야 할 수 있습니다.

이전 테이블에서 선택한 열이 INSERT INTO 문에 새 테이블의 열에 정의 된 순서와 동일한 순서인지 확인해야합니다.

데이터를 새 테이블에 삽입 한 후 모든 데이터가 올바르게 삽입되었는지 확인할 수 있습니다. 외래 키 제약 조건을 피하기 위해 다른 테이블에서 외래 키 참조를 업데이트하십시오.

그런 다음 이전 테이블을 삭제하고 이전 테이블의 이름으로 새 테이블의 이름을 바꿀 수 있습니다 :

DROP old_table; 
ALTER TABLE new_table_name RENAME TO old_table_name; 
+0

감사 의견에 대한. "새로운 데이터 유형이 이전 데이터 유형과 직접적으로 호환되지 않으면 다른 데이터 유형으로 형변환을 수행해야 할 수도 있습니다." SQL 문에서이를 수행하는 방법? Insert Into 명령에서이 작업을 수행해야합니까? 그렇다면 어떻게해야합니까? – Aqua267

+0

캐스팅 구문은'cast (col as type)'과 같을 것이다. 여기서'col'은 열이고'type'은 real, int 등의 SQL 유형이다. –

+0

고마워. Rename을 구현할 수있었습니다. 지금까지 Drop, Rename, Add and reorder columns을 구현했습니다. 그러나 나는이 루틴을 어떤 순서로 호출해야하는지 알아보기 위해 몇 가지 테스트를 실행하고 있습니까? 칼럼을 항상 먼저 호출해야합니까? DROP RENAME ADD REORDER 열의 순서입니까? 이견있는 사람? – Aqua267