В этом учебном пособии вы узнаете, как удалить foreign key в SQLite с синтаксисом и примерами.
Описание
После создания внешнего ключа вам может понадобиться удалить внешний ключ из таблицы. Давайте рассмотрим, как это сделать.
Подсказка: Вы не можете удалить внешний ключ, используя ALTER TABLE, потому что SQLite не поддерживает DROP CONSTRAINT в операторе ALTER TABLE. Однако в этом руководстве мы покажем вам альтернативный путь, который позволит вам удалить внешний ключ в существующей таблице.
Как удалить внешний ключ таблицы
Вы не можете использовать оператор ALTER TABLE для удаления внешнего ключа в SQLite. Вместо этого вам нужно будет переименовать таблицу, создать новую таблицу без внешнего ключа, а затем скопировать данные в новую таблицу.
Синтаксис
Синтаксис для удаления внешнего ключа в SQLite:
BEGIN TRANSACTION;
ALTER TABLE table1 RENAME TO _table1_old;
CREATE TABLE table1
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
);
INSERT INTO table1 SELECT * FROM _table1_old;
COMMIT;
PRAGMA foreign_keys=on;
Пример
Если вы создали внешний ключ в SQLite следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CREATE TABLE departments ( department_id INTEGER PRIMARY KEY AUTOINCREMENT, department_name VARCHAR ); CREATE TABLE employees ( employee_id INTEGER PRIMARY KEY AUTOINCREMENT, last_name VARCHAR NOT NULL, first_name VARCHAR, department_id INTEGER, CONSTRAINT fk_departments FOREIGN KEY (department_id) REFERENCES departments(department_id) ); |
В этом примере мы создали первичный ключ в таблице departments, который состоит только из одного поля - поля department_id. Затем мы создали внешний ключ с именем fk_departments в таблице employees, который ссылается на таблицу departments на основании поля department_id.
Если затем мы хотим удалить внешний ключ с именем fk_departments, мы можем выполнить следующую команду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
PRAGMA foreign_keys=off; BEGIN TRANSACTION; ALTER TABLE employees RENAME TO _employees_old; CREATE TABLE employees ( employee_id INTEGER PRIMARY KEY AUTOINCREMENT, last_name VARCHAR NOT NULL, first_name VARCHAR, department_id INTEGER ); INSERT INTO employees SELECT * FROM _employees_old; COMMIT; PRAGMA foreign_keys=on; |
Этот пример переименует нашу существующую таблицу employees в _employees_old. Затем он создаст новую таблицу employees без внешнего ключа. Затем он вставит все данные из таблицы _employees_old в таблицу employees.
Этот альтернативный путь позволяет удалить внешний ключ из таблицы employees, не теряя данные в таблице.