프로그램

SQLite 는 ALTER TABLE MODIFY 가 없단다.

(주)CKBcorp., 2016. 9. 4. 15:38
반응형



stackoverflow 에서 확인한 내용이다. http://stackoverflow.com/questions/4007014/alter-column-in-sqlite



충격이다... 그래서 이전에 썼던 삽질에서 ALTER TABLE CHANGE 가 안먹었던걸지도. ( MODIFY 였나?? )

어쨌던 stackoverflow의 답글들을 보면, ( Alter 에서 ) Add 만 있고 change 나 modify 가 없으니까, 만약 ALTER TABLE MODIFY 를 하려면

1. 테이블 백업
2. 테이블 스키마를 변경된 Create 로 재선언
3. 백업(덤프) 했던 테이블 데이터를 새 테이블에 다시 복사.

의 뻘짓을 하라고 한다. 그냥 답이 없다고 써있다. 


일단, command line 말고 sqlite browser 쓰면 바뀌긴 하는데, 바뀐 건지 확인을 못 하겠다.

무슨소리냐면.. sqlite 는 기본적으로 5가지 데이터 타입( number, real, text.... 나머지 기억안남. 인터넷 뒤져봐라.  ) 이외에 모든 형은 text 로 처리한다. 그래서 데이터 타입 잘못 넣어도, 엔간하면 작동함.



마무리를 못하겠다. 어쨌던 충격과 공포다. 


PS : 위 링크의 스택오버플로우의 댓글을 모두다 읽어보면, 

우회로를 사용하는 법이 있기는 있다. Alter table 을 뚫는 게 아니라, sqlite 의 테이블 스키마를 저장하는 테이블 자체에 직접 update 하는 방법같다. 내가 해 본 건 아니지만 혹시 필요한 사람이 있다면... 해 보고 되는지 아닌지 답글부탁. ( 본문 글에는 된다고 써있음 )


대략 아래와 같다.

This method worked for me, although to avoid situations in which the columns might be in a different order (i.e. from a previous ADD COLUMN command), I used: UPDATE SQLITE_MASTER SET SQL = replace(SQL, '[MyColumn] integer NOT NULL', '[MyColumn] integer NULL') WHERE NAME = 'MyTable'. Also, be careful not to run this as part of a transaction - it may prevent some of the earlier transaction commands from running. – Ross Aug 16 '13 at 14:58 


무운을 빈다.



 



반응형