Подтвердить что ты не робот

Синтаксис SQLite для создания таблицы с внешним ключом

Я создаю таблицу с ссылками на внешние ключи. Я задаюсь вопросом о требуемом синтаксисе. В основном я видел следующее (из http://www.sqlite.org/foreignkeys.html#fk_basics):

CREATE TABLE artist(  
  artistid    INTEGER PRIMARY KEY,  
  artistname  TEXT  
);  
CREATE TABLE track(  
  trackid     INTEGER,   
  trackname   TEXT,  
  trackartist INTEGER,  
  FOREIGN KEY(trackartist) REFERENCES artist(artistid)  
);

Однако с того же сайта (http://www.sqlite.org/foreignkeys.html#fk_actions) я вижу следующее:

CREATE TABLE artist(  
  artistid    INTEGER PRIMARY KEY,  
  artistname  TEXT  
);  
CREATE TABLE track(  
  trackid     INTEGER,  
  trackname   TEXT,   
  trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE  
);

Последний синтаксис немного более краткий, но я хочу знать, как результат каким-то образом отличается (кроме ON UPDATE CASCADE, который, конечно, имеет эффект, я включил его только потому, что скопировал код точно из и потому, что я не знаю, что приведенный выше синтаксис не применяется только при создании такой спецификации). Я работаю на Android, если это имеет значение.

4b9b3361

Ответ 1

Смотрите диаграммы синтаксиса .

Первый синтаксис - это ограничение таблицы, а второй синтаксис - ограничение столбца. В этих примерах они ведут себя одинаково.

Вам понадобится ограничение таблицы для ключа по нескольким столбцам (где у вас нет единственного столбца, к которому вы могли бы добавить его).

Ответ 2

Этот ответ может быть не связан с вашим, но я думал, что он должен быть полезен для других, которые работают с базой данных Android.
В SQLite Внешние ограничения по умолчанию отключены по умолчанию (для обратной совместимости). Вы должны включить его с помощью

PRAGMA foreign_keys = 1

после установления соединения с базой данных. Здесь ссылка на официальные документы, которые объясняют это более подробно. http://sqlite.org/foreignkeys.html Пожалуйста, перейдите к включению поддержки внешнего ключа в приведенной выше ссылке.