문제

사전 정의 된 스키마와 일치하도록 최근 SQLITE 버전에서 테이블을 수정하는 간단한 방법이 있습니까?

개요:

war_id INTEGER NOT NULL, 
clanname VARCHAR(64), 
clanhomepage VARCHAR(128), 
date DATETIME, 
server VARCHAR(64), 
warmode_id INTEGER, 
squad_id INTEGER, 
notes TEXT, clantag String(16), 
PRIMARY KEY (war_id), 
FOREIGN KEY(warmode_id) REFERENCES warmodes (warmode_id), 
FOREIGN KEY(squad_id) REFERENCES squads (squad_id), 
FOREIGN KEY(orgamember_id) REFERENCES users (user_id)

이제 Clanname 후 Clantag Varchar (16)를 삽입하여 다른 설정과 일치합니다.

나는 내보내기, 도랑, 재현을 신경 쓰지 않지만 다른 SQL 데이터베이스가 처리 할 수있는 경우, 그 없이도 그렇게 할 수있는 옵션이 있는지 궁금합니다 ...

도움이 되었습니까?

해결책

SQLITE는 열을 추가하는 것을 지원합니다 여기에 표시됩니다. 당신이 직면하게 될 유일한 제한은 열이 테이블의 끝에 있다는 것입니다. 그러나 정상적인 사용 열 순서의 경우 문제가되지 않아야합니다. 대체 솔루션은 새 정의로 새 테이블을 만들고 모든 데이터를 삽입하고 이전 테이블을 떨어 뜨린 다음 새 테이블의 이름을 바꾸는 것입니다.

BEGIN TRANSACTION;
CREATE TABLE War_TMP( 
    war_id INTEGER NOT NULL, 
    clanname VARCHAR(64), 
    clantag VARCHAR(16),
    clanhomepage VARCHAR(128), 
    date DATETIME, 
    server VARCHAR(64), 
    warmode_id INTEGER, 
    squad_id INTEGER, 
    notes TEXT, 
    PRIMARY KEY (war_id), 
    FOREIGN KEY(warmode_id) REFERENCES warmodes (warmode_id), 
    FOREIGN KEY(squad_id) REFERENCES squads (squad_id), 
    FOREIGN KEY(orgamember_id) REFERENCES users (user_id)
);

INSERT INTO War_TMP() SELECT war_id, clanname, "", clanhomepage,date,server,warmode_id,squad_id,notes FROM War;
DROP TABLE War;

ALTER TABLE War_TMP RENAME TO War;

COMMIT;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top