Как остановить родительское удаление, если ребенок присутствует - PullRequest
0 голосов
/ 27 января 2011

Я хочу использовать ограничения в SQLite.

Сценарий: Остановить удаление родителя, если присутствует дочерний элемент.

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 27 января 2011

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

sqlite> PRAGMA foreign_keys = ON;

Подробности в Включение поддержки внешнего ключа

SQLite может быть скомпилирован с полностью отключенной поддержкой внешнего ключа.Об этом нужно помнить.

0 голосов
/ 27 января 2011

Допустим, у вас есть таблица A (ID, NAME) и таблица B (ID, A_ID, NICK_NAME)

При создании таблицы A вы должны сделать

create table A (
    ID INTEGER PRIMARY KEY,
    NAME TEXT NOT NULL UNIQUE
);

create table B (
    ID INTEGER PRIMARY KEY,
    A_ID INTEGER NOT NULL,
    NICK_NAME TEXT,
    CONSTRAINT A_FK FOREIGN KEY (A_ID) REFERENCES A (ID) ON DELETE RESTRICT
);

Это должновызвать ошибку, если вы попытаетесь удалить контент из таблицы A, на который ссылается столбец B.

РЕДАКТИРОВАТЬ: как отмечено в комментарии автора оригинала и после него, это, по-видимому, не работает.Кто-нибудь еще пролил свет на это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...