Harrix Блог

  • Списки статей
    • Все статьи
    • IT
    • Qt
    • C++
    • Сложение двух чисел
    • Web программированиe
    • FAQ
    • Latex
    • Установка программ
    • Мифы
    • Видео
    • Про фото
  • Проекты
  • Harrix.org
  • RSS
  • Контакты

Внешние ключи в DB Browser for SQLite

SQLite поддерживает внешние ключи

10.06.2017 1 Comment 14 563 просмотров

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

Откроем программу DB Browser for SQLite.

Создадим новую базу данных, например, music.db.

Не будем пока создавать таблицы.

Включим поддержку внешних ключей. Не забудьте нажать на кнопку Save.

Теперь покажем, как работают внешние ключи.

Создадим две таблицы artists (музыканты) и tracks (песни). Конструктор не будем использовать. Во второй таблице будем хранить номер музыканта как внешний ключ.

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE artists(
  _id    INTEGER PRIMARY KEY AUTOINCREMENT,
  name  TEXT
);
 
CREATE TABLE tracks(
  _id     INTEGER PRIMARY KEY AUTOINCREMENT,
  title   TEXT,
  id_artist INTEGER,
  FOREIGN KEY(id_artist) REFERENCES artists(_id)
);

Опять же без конструктора закинем две записи о двух исполнителях.

1
2
INSERT INTO artists (name) VALUES ('Nightwish');
INSERT INTO artists (name) VALUES ('Scooter');

Попробуем добавить записи к таблице песню с правильным номером исполнителя.

1
INSERT INTO tracks (title, id_artist) VALUES ('Wishmaster', 1);

Запрос прошел успешно.

А теперь попробуем добавить запись с несуществующим номером исполнителя.

1
INSERT INTO tracks (title, id_artist) VALUES ('To the Sky', 100);

А теперь запрос не пройдет из-за внешнего ключа.

И в таблице tracks мы увидим только одну запись.

Обратите внимание на то, что в SQLite можно добавлять внешние ключи через CREATE. В «полноценных» БД можно добавлять внешние ключи через ALTER. Но в SQLite это сделать нельзя.

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

И напоследок покажу, как сделать выборку песен из БД так, чтобы вместо номеров песен мы видели названия самих исполнителей.

Этот пример стандартного вызова SELECT, когда мы увидим песни с номерами исполнителей.

1
SELECT * FROM TRACKS;

А вот пример кода, который вернет нам то, что нужно.

1
2
3
SELECT t._id, t.title, a.name AS a_name
FROM tracks t
LEFT JOIN artists a ON t.id_artist = a._id;

Более упрощенный код запроса.

1
2
3
SELECT tracks._id, tracks.title, artists.name
FROM tracks
LEFT JOIN artists ON tracks.id_artist = artists._id;

Рекомендую прочитать эту статью.


Статьи по теме:

  1. Подключение базы данных SQLite в Qt
  2. Подключение существующей БД SQLite в Android Studio
  3. Connecting an existing SQLite database to Android Studio
  4. Подключение SQLite в проектах Visual Studio в CRL проекте

IT SQLite

© 2014 Harrix