Как я добавляю внешний ключ к существующей таблице SQLite?

Самый большой difrence - то, что когда-нибудь при изменении внутренней структуры можно все еще поддержать методов get и методы set, как, изменяя их внутреннюю логику, не причиняя пользователям боль API.

118
задан Wolf 17 January 2018 в 11:18
поделиться

1 ответ

Вы не можете.

Хотя синтаксис SQL-92 для добавления внешнего ключа в вашу таблицу будет следующим:

ALTER TABLE child ADD CONSTRAINT fk_child_parent
                  FOREIGN KEY (parent_id) 
                  REFERENCES parent(id);

SQLite не поддерживает вариант ADD CONSTRAINT команды ALTER TABLE ( sqlite.org: функции SQL, которые SQLite не реализует ).

Следовательно, единственный способ добавить внешний ключ в sqlite 3.6.1 - это выполнить CREATE TABLE следующим образом:

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

К сожалению, вам придется сохранить существующие данные во временную таблицу, отбросьте старую таблицу, создайте новую таблицу с ограничением FK, затем скопируйте данные обратно из временной таблицы. ( sqlite.org - FAQ: Q11 )

187
ответ дан 24 November 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: