[sqlite] sqlite의 ALTER COLUMN

sqlite에서 열을 어떻게 변경합니까? 이것은Postgresql

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

sqlite에는 ALTER COLUMN이 전혀 없으며 ALTER TABLE 만 지원됩니다.

어떤 생각? 감사!



답변

sqlite에는 ALTER COLUMN이 없습니다.

귀하의 유일한 옵션은 다음과 같습니다.

  • 테이블 이름을 임시 이름으로 변경
  • NOT NULL 제약 조건없이 새 테이블 만들기
  • 이전 테이블의 내용을 새 테이블에 복사
  • 이전 테이블 제거

이 다른 Stackoverflow 답변 은 프로세스를 자세히 설명합니다.


답변

ALTER COLUMN이 아니라는 것은 사실이지만 열 이름 만 바꾸거나 NOT NULL 제약 조건을 삭제하거나 데이터 유형을 변경하려는 경우 다음과 같은 위험한 명령 집합을 사용할 수 있습니다 .

PRAGMA writable_schema = 1;
UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';
PRAGMA writable_schema = 0;

스키마에 변경 사항을 다시로드하려면 연결을 닫았다가 다시 열거 나 데이터베이스를 진공 상태로 만들어야합니다.

예를 들면 :

Y:\> **sqlite3 booktest**
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> **create table BOOKS ( title TEXT NOT NULL, publication_date TEXT NOT
NULL);**
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**
Error: BOOKS.publication_date may not be NULL
sqlite> **PRAGMA writable_schema = 1;**
sqlite> **UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT
NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';**
sqlite> **PRAGMA writable_schema = 0;**
sqlite> **.q**

Y:\> **sqlite3 booktest**
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**
sqlite> **.q**

참조는 다음과 같습니다.


pragma writable_schema
이 pragma가 켜져 있으면 데이터베이스가 포함 된 SQLITE_MASTER 테이블은 일반 UPDATE, INSERT 및 DELETE 문을 사용하여 변경할 수 있습니다. 경고 :이 pragma를 잘못 사용하면 데이터베이스 파일이 손상 될 수 있습니다.

[alter table] (From http://www.sqlite.org/lang_altertable.html )
SQLite는 ALTER TABLE의 제한된 하위 집합을 지원합니다. SQLite의 ALTER TABLE 명령을 사용하면 사용자가 테이블의 이름을 바꾸거나 기존 테이블에 새 열을 추가 할 수 있습니다. 열 이름을 바꾸거나 열을 제거하거나 테이블에서 제약 조건을 추가 또는 제거 할 수 없습니다.

테이블 구문 변경


답변

SQLite는 ALTER TABLE의 제한된 하위 집합을 지원합니다. SQLite의 ALTER TABLE 명령을 사용하면 사용자가 테이블의 이름을 바꾸거나 기존 테이블에 새 열을 추가 할 수 있습니다. 열 이름을 바꾸거나 열을 제거하거나 테이블에서 제약 조건을 추가 또는 제거 할 수 없습니다. 그러나 다음 단계에 따라 테이블 열 데이터 유형 또는 기타 속성을 변경할 수 있습니다.

  1. 거래 시작;
  2. 임시 테이블 생성 t1_backup (a, b);
  3. INSERT INTO t1_backup SELECT a, b FROM t1;
  4. 드롭 테이블 t1;
  5. 테이블 생성 t1 (a, b);
  6. INSERT INTO t1 SELECT a, b FROM t1_backup;
  7. 드롭 테이블 t1_backup;
  8. 범하다

자세한 내용은 링크를 참조하십시오 .


답변