Как работает SQLite foreign key

SQLite supports the use of foreign keys to enforce referential integrity between tables. When a foreign key is defined in a table, it creates a relationship between the columns of that table and the columns of another table. Here's how it works:

1. Define the foreign key constraint:


CREATE TABLE Orders (
    order_id INTEGER PRIMARY KEY,
    customer_id INTEGER,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

In this example, the "Orders" table has a foreign key constraint on the "customer_id" column. The foreign key references the "customer_id" column in the "Customers" table.

2. Insert data into the tables:


INSERT INTO Customers (customer_id, customer_name)
VALUES (1, 'John');

INSERT INTO Orders (order_id, customer_id)
VALUES (1, 1);

In this example, we insert a customer record with ID 1 into the "Customers" table and an order record with ID 1 and customer ID 1 into the "Orders" table.

3. Use the foreign key:


SELECT order_id, customer_name
FROM Orders
JOIN Customers ON Orders.customer_id = Customers.customer_id;

In this example, we use the foreign key to join the "Orders" and "Customers" tables and retrieve the order ID and customer name.

The foreign key constraint ensures that the value in the "customer_id" column of the "Orders" table references a valid customer ID in the "Customers" table. If you try to insert a value that doesn't exist in the referenced table, or if you try to delete a row that is referenced by a foreign key, SQLite will raise an error.

By using foreign keys, you can maintain the integrity of your data and enforce relationships between tables in SQLite.

Детальный ответ

SQLite Foreign Key: Как работает?

SQLite – это реляционная база данных, которая предоставляет легковесный и встроенный способ хранения данных. Одной из важных функций SQLite является использование внешних ключей (foreign key), которые помогают связывать данные между различными таблицами.

Что такое внешний ключ?

Внешний ключ – это столбец или группа столбцов в таблице, который ссылается на первичный ключ другой таблицы. Он используется для создания связи между двумя таблицами и поддержания целостности данных. Внешний ключ указывает на значение первичного ключа в другой таблице.

Например, представим, что у нас есть две таблицы: "Пользователи" и "Заказы". Каждый пользователь имеет уникальный идентификатор, который является первичным ключом в таблице "Пользователи". В таблице "Заказы" мы хотим хранить информацию о заказах, а также ссылаться на конкретного пользователя. Для этого мы можем использовать внешний ключ, который будет указывать на идентификатор пользователя в таблице "Пользователи".

Как использовать внешний ключ в SQLite?

Для создания внешнего ключа в SQLite необходимо выполнить несколько шагов:

  1. Убедитесь, что поддержка внешних ключей включена. По умолчанию в SQLite поддержка внешних ключей отключена. Чтобы включить ее, используйте следующую команду:
PRAGMA foreign_keys = ON;

Это позволяет SQLite проверять внешние ключи при выполнении операций добавления, обновления и удаления данных.

  1. Определите столбец в таблице как внешний ключ, используя синтаксис FOREIGN KEY. Например, предположим, что у нас есть таблица "Orders" с внешним ключом, который ссылается на столбец "user_id" в таблице "Users":
CREATE TABLE Orders (
    order_id INTEGER PRIMARY KEY,
    user_id INTEGER,
    FOREIGN KEY (user_id) REFERENCES Users(user_id)
);

В приведенном выше примере столбец "user_id" в таблице "Orders" является внешним ключом, который ссылается на столбец "user_id" в таблице "Users". Ключевое слово "REFERENCES" указывает имя таблицы и столбца первичного ключа, на который ссылается внешний ключ.

Что происходит при использовании внешнего ключа?

При использовании внешнего ключа в SQLite происходит несколько важных вещей:

  1. Проверка целостности данных: SQLite автоматически проверяет, существует ли значение в связанной таблице перед тем, как разрешить операцию добавления, обновления или удаления данных в текущей таблице. Если значения не существует, то операция будет отклонена.
  2. Обновление и удаление относящихся данных: Если запись в связанной таблице обновляется или удаляется, SQLite предпримет определенные действия в зависимости от использованного оператора:
  • ON DELETE CASCADE: Если запись в связанной таблице удаляется, все связанные записи в текущей таблице также будут удалены.
  • ON DELETE SET NULL: Если запись в связанной таблице удаляется, значения внешнего ключа в текущей таблице устанавливаются в NULL.
  • ON DELETE NO ACTION: Если запись в связанной таблице удаляется, SQLite откажет в выполнии операции удаления и выдаст ошибку.

Ограничения при использовании внешних ключей

При использовании внешних ключей в SQLite необходимо учитывать некоторые ограничения:

  • Обе таблицы должны быть в одной базе данных SQLite.
  • Столбец, на который ссылается внешний ключ, должен быть первичным ключом или иметь уникальное индексирование.
  • Таблицы должны быть созданы в правильном порядке. Если таблица, содержащая внешний ключ, создается раньше таблицы, на которую она ссылается, то возникнет ошибка.

Заключение

Внешний ключ – это мощный инструмент для создания связей между таблицами в SQLite. Он помогает поддерживать целостность данных и обеспечивает возможность выполнения различных операций с данными, таких как добавление, обновление и удаление. Внешний ключ позволяет строить эффективные и структурированные базы данных, облегчая работу с данными.

Видео по теме

11 - Внешние ключи (Foreign Keys) - Уроки PostgreSQL

Начальный курс SQL.Первичный ключ и внешний ключ Типы связей между таблицами

Первичный ключ, внешний ключ, суррогатный ключ / Илья Хохлов

Похожие статьи:

Как работает SQLite foreign key

🔧 Как создать таблицу в SQLite для баз данных и веб-разработки: пошаговое руководство для начинающих 📚