2013-08-17 4 views
0

SQLite를 사용하여 열을 삭제하는 방법을 연구했습니다. 인해 DROP COLUMN에 문의 부족으로, 나는 다음과 같은 해결 방법을 사용하여 고려하고 : 다음SQLite 삭제 열 및 계단식 삭제

Delete column from SQLite table

이 원본을 삭제, 임시 테이블에 모든 데이터를 이동 포함하고, 그것을 만드는 다시.

수정하려는 테이블에 계단식 삭제 종속성이있는 경우 종속 테이블의 데이터 손실을 방지하려면 어떻게해야합니까?

Ex.

CREATE TABLE A (
    id INTEGER PRIMARY KEY, 
    name TEXT, 
    dummy INTEGER 
) 

CREATE TABLE B (
    id INTEGER PRIMARY KEY, 
    name TEXT, 
    a_id INTEGER, 
    FOREIGN KEY (a_id) REFERENCES A(id) ON DELETE CASCADE 
) 

의 내가 표 A에서 열 "더미"를 제거 할 가정 해 봅시다,하지만 난 표 B.의 모든 행에 영향을하고 싶지 않아

이 수행 할 수 있습니다?

답변

1

외래 키 제약 조건은 with a PRAGMA을 비활성화 할 수 있습니다. 레코드를 제거하기 전에 PRAGMA foreign_keys = off을 실행하기 만하면됩니다.

0

계단식 삭제는 레코드 (행)를 기반으로하며 속성 (열)을 기반으로하지 않습니다. 더미 열을 제거해도 상위 테이블에서 레코드를 제거하지 않으므로 계단식 삭제가 발생하지 않습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 내가 특별히 행을 지우는 것이 아니지만, (SQLite의 DROP COLUMN 기능이 없기 때문에) A를 삭제 한 다음 재 작성하고 있지만 B에 영향을주지는 않겠습니까? –

+0

테이블을 삭제하는 경우 계단식 삭제를 유도하는 레코드를 제거합니다. 표 A를 삭제하고 다시 작성하기 전에 표 B의 데이터를 새 백업 표로 복사해야합니다. 그러면 표 B에 다시 복사해야합니다. –