SQLite
 sql >> база данни >  >> RDS >> SQLite

SQLite - Създаване на връзка

SQLite поддържа връзки точно като всяка друга система за управление на релационни бази данни.

SQLite е релационен система за управление на база данни (RDBMS). Той използва същия релационен модел, който използват други популярни СУБД (като MySQL, Oracle, SQL Server, MS Access).

Това означава, че можете да създадете няколко таблици, след което да ги свържете една с друга чрез връзка .

връзка е мястото, където имате няколко таблици, които съдържат свързани данни и данните са свързани с обща стойност, която се съхранява и в двете таблици.

Следната диаграма илюстрира тази концепция:

И така, нека добавим още една таблица, наречена Албуми , след това свържете това с нашите Изпълнители таблица чрез връзка.

Това ще ни позволи да потърсим на кой изпълнител принадлежи даден албум.

Създайте новата таблица

Така че нека да продължим и да създадем Албумите таблица:

CREATE TABLE Albums(
  AlbumId     INTEGER PRIMARY KEY, 
  AlbumName   TEXT NOT NULL,
  Year        TEXT NOT NULL,
  ArtistId INTEGER NOT NULL,
  FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId)
);

Подобно на това, когато създадохме Изпълнители таблица обаче към тази сме добавили FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) до края на изявлението.

Това създава ограничение за външен ключ върху Albums.ArtistId колона. Това означава, че всички данни, които се вмъкват в тази колона, трябва да съвпадат със стойност в Artists.ArtistId колона.

Ако не направихме това, би било възможно да имаме албум, който не принадлежи на изпълнител. С други думи, бихме могли да имаме осиротели записи в нашата база данни. Не е добре, ако се опитвате да поддържате референтната цялост.

Сега, ако стартираме .tables команда, трябва да видим и двете таблици в базата данни:

sqlite> .tables
Albums   Artists

Тестване на връзката

След като създадем таблицата с външния ключ, можем да я тестваме, като се опитаме да въведем грешни данни. Можем да опитаме да влезем в албум с ArtistId който не съвпада с Идентификатор на изпълнител в посочената таблица (т.е. Изпълнители таблица):

INSERT INTO Albums (AlbumName, Year, ArtistId)
VALUES ('Powerslave', '1984', 70);

Това трябва да доведе до следното:

sqlite> INSERT INTO Albums (AlbumName, Year, ArtistId)
   ...> VALUES ('Powerslave', '1984', 70);
Error: FOREIGN KEY constraint failed

Също така, изпълняване на SELECT изявление в таблицата няма да върне никакви данни.

Това е така, защото ограничението на външния ключ блокира вмъкването на грешна стойност.

Не работи?

Ако не получите грешка, когато се опитвате да въведете грешни данни като тази, може да се наложи да проверите настройките си.

Изпълнете следната команда:PRAGMA foreign_keys;

Ако това доведе до 0 това означава, че вашите ограничения за външен ключ са деактивирани. Всъщност това е поведението по подразбиране на SQLite (това е за обратна съвместимост).

За да активирате ограниченията на външния ключ, въведете следния PRAGMA foreign_keys = ON;

Сега стартирайте PRAGMA foreign_keys; трябва да върне 1 , а последващите опити за вмъкване на невалиден външен ключ ще бъдат неуспешни.

Въпреки това, ако PRAGMA foreign_keys; командата не връща данни, вашата реализация на SQLite не поддържа външни ключове (или защото е по-стара от версия 3.6.19, или защото е компилирана с SQLITE_OMIT_FOREIGN_KEY или SQLITE_OMIT_TRIGGER дефиниран).

Вмъкнете още данни

Сега, когато връзката е установена, можем да добавим толкова данни, колкото са ни необходими, с увереността, че ще бъдат вмъкнати само записи с валидни външни ключове.

INSERT INTO Albums VALUES (NULL, 'Killers', '1981', 7);
INSERT INTO Albums VALUES (NULL, 'Powerslave', '1984', 7);
INSERT INTO Albums VALUES (NULL, 'Surfing with the Alien', '1987', 1);
INSERT INTO Albums VALUES (NULL, 'Heavy as a Really Heavy Thing', '1995', 11);
INSERT INTO Albums VALUES (NULL, 'Yummy Yummy', '1994', 17);
INSERT INTO Albums VALUES (NULL, 'Out of the Loop', '2007', 6);
INSERT INTO Albums VALUES (NULL, 'Suck on This', '1989', 13);
INSERT INTO Albums VALUES (NULL, 'Pork Soda', '1993', 13);
INSERT INTO Albums VALUES (NULL, 'Sailing the Seas of Cheese', '1991', 13);
INSERT INTO Albums VALUES (NULL, 'Flying in a Blue Dream', '1989', 1);
INSERT INTO Albums VALUES (NULL, 'Black Swans and Wormhole Wizards', '2010', 1);
INSERT INTO Albums VALUES (NULL, 'Somewhere in Time', '1986', 7);
INSERT INTO Albums VALUES (NULL, 'Big Red Car', '1995', 17);

След това ще изберем данни от двете таблици с помощта на JOIN изявление.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията Date() в SQLite

  2. Как да вкарате полето ForeignCollection в курсора в Ormlite

  3. Включване на низове в единични кавички в резултатите от заявка на SQLite

  4. Опит за повторно отваряне на вече затворен обект sqlitedatabase

  5. СЛУЧАЙ SQLite