У меня есть эти таблицы:ошибки при создании SQLITE триггера
+-------------------------+
| Movies |
+-----+--------+----------+
| _id | title | language |
+--+--+--------+----------+
|
+-------------------------+
|
+----------------------------------+
| Movie_Cast |
+------------+----------+----------+
| id | actor_id | movie_id |
+------------+-----+----+----------+
|
+-------------+
|
+-------------------+
| Actors |
+----------+--------+
| actor_id | name |
+----------+--------+
То, что я пытаюсь сделать, это удалить строку фильмов, удалить также соответствующие строки из соединительной таблицы (movie_cast). И, наконец, удалите из таблицы участников все строки, на которые не ссылаются в таблице movie_cast.
это таблица схема:
create table movies (_id INTEGER PRIMARY KEY, title TEXT, language TEXT);
create table movie_cast (id INTEGER PRIMARY KEY,
actor_id INTEGER REFERENCES actors(actor_id) ON DELETE RESTRICT,
movie_id INTEGER REFERENCES movies(_id) ON DELETE CASCADE);
create table actors (actor_id INTEGER PRIMARY KEY, actor TEXT UNIQUE);
прямо сейчас, когда пользователь удаляет запись фильмов, movie_cast строки, ссылающаяся на movies._id также удаляется. (у меня были некоторые проблемы с этим, но затем я использовал «PRAGMA foreign_keys = ON;»), пока что так хорошо! Чтобы удалить строки участников, я подумал, что могу создать триггер, который пытается удалить записи участников на основе movie_cast.actor_id, который мы просто удалили, но так как я использую «ON DELETE RESTRIC», если у актера есть ссылка, это будет прервать удаление.
Но я даже не будучи в состоянии доказать это, потому что при создании триггера я получаю сообщение об ошибке:
CREATE TRIGGER Delete_Actors AFTER DELETE ON movie_cast
FOR EACH ROW
BEGIN
DELETE FROM actors WHERE actors.actor_id = OLD.actor_id;
END;
SQL Error [1]: [SQLITE_ERROR] SQL error or missing database (near "actor_id": syntax error)
[SQLITE_ERROR] SQL error or missing database (near "actor_id": syntax error)
Кажется, он не знает, что старое. Что я здесь делаю неправильно?
UPDATE:
Похоже SQLITE проблемы конфигурации. Я использую DBeaver SQLite 3.8.2, и это, кажется, проблема с временным файлом, но если честно, я не знаю, как это исправить даже чтение возможное решение:
It's failing to create the temporary file required for a statement journal.
It's likely any statement that uses a temporary file will fail.
http://www.sqlite.org/tempfiles.html
One way around the problem would be to configure SQLite not to use
temp files using "PRAGMA temp_store = memory;".
Or ensure that the environment variable SQLITE_TMPDIR is set to
the path of a writable directory. See also:
http://www.sqlite.org/c3ref/temp_directory.html
Итак, Я собираюсь предположить, что он работает, и попробуйте прямо в моем приложении для Android.
Работы для меня. Как вы создаете триггер? –
@CL. CREATE TRIGGER Delete_Actors ПОСЛЕ УДАЛЕНИЯ ON movie_cast ДЛЯ КАЖДОЙ ROW НАЧАЛО УДАЛИТЬ ОТ актеров WHERE players.actor_id = OLD.actor_id; КОНЕЦ; – ILovemyPoncho