IT이야기

sqlite (3.6.21) 테이블에서 제약 조건 삭제

cyworld 2021. 4. 16. 21:32
반응형

sqlite (3.6.21) 테이블에서 제약 조건을 어떻게 삭제합니까?


다음 표가 있습니다.

CREATE TABLE child( 
  id INTEGER PRIMARY KEY, 
  parent_id INTEGER CONSTRAINT parent_id REFERENCES parent(id), 
  description TEXT);

제약 조건을 어떻게 삭제합니까?


SQLite는 (이 답변 현재) alter table drop constraint명령을 지원하지 않습니다 . 허용되는 구문은 여기에서 볼 수 있습니다 . 제약 조건없이 새 테이블을 생성하고 데이터를 전송 한 다음 이전 테이블을 삭제해야합니다.

다음과 같은 것이 작동해야한다고 생각합니다.

CREATE TABLE child2 ( 
    id          INTEGER PRIMARY KEY, 
    parent_id   INTEGER,
    description TEXT
);
INSERT INTO child2 (id, parent_id, description)
   SELECT id, parent_id, description FROM CHILD;
DROP TABLE child;
ALTER TABLE child2 RENAME TO child;

(가) 있습니다 insert into아마로 단순화 할 수 없습니다 명시 적으로 열 이름을 사용하지만 내가 당신이 아니라 구조를 변경하고자하는 경우에는 그 방법을 떠 났어요.

예를 들어 열에 대한 제약 조건을 제거 하는 경우 해당 parent_id열을 그대로 유지하는 것은 모호한 용도입니다. 이 경우 데이터 전송을 다음으로 수정할 수 있습니다.

CREATE TABLE child2 (id INTEGER PRIMARY KEY, description TEXT);
INSERT INTO child2 (id, description) SELECT id, description FROM CHILD;

이것이 더 쉽고 간결한 접근 방식이라고 생각합니다.

copy db.sqlite3 backup-db.sqlite3
echo .dump tablename | sqlite3 db.sqlite3 > modify.sql
(now delete or change the constraint in modify.sql)
echo drop table tablename; | sqlite3 db.sqlite3 
sqlite3 db.sqlite3 < modify.sql

이제 새 데이터베이스 테이블을 다시 덤프하고 차이점을 비교할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/1884787/how-do-i-drop-a-constraint-from-a-sqlite-3-6-21-table

반응형