Синтаксис 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, если это имеет значение.
Ответы
Ответ 1
Смотрите диаграммы синтаксиса .
Первый синтаксис - это ограничение таблицы, а второй синтаксис - ограничение столбца.
В этих примерах они ведут себя одинаково.
Вам понадобится ограничение таблицы для ключа по нескольким столбцам (где у вас нет единственного столбца, к которому вы могли бы добавить его).
Ответ 2
Этот ответ может быть не связан с вашим, но я думал, что он должен быть полезен для других, которые работают с базой данных Android.
В SQLite Внешние ограничения по умолчанию отключены по умолчанию (для обратной совместимости). Вы должны включить его с помощью
PRAGMA foreign_keys = 1
после установления соединения с базой данных.
Здесь ссылка на официальные документы, которые объясняют это более подробно.
http://sqlite.org/foreignkeys.html
Пожалуйста, перейдите к включению поддержки внешнего ключа в приведенной выше ссылке.