Извините, я не могу воспроизвести это, используя таблицы, которые вы указали в своем вопросе. Вот сессии в SQL * Plus:
SQL> CREATE TABLE movie (
2 ID int PRIMARY KEY,
3 name varchar2(50) NOT NULL
4 );
Table created.
SQL> CREATE TABLE length (
2 ID int PRIMARY KEY REFERENCES movie(ID) ON DELETE CASCADE,
3 length int NOT NULL
4 );
Table created.
SQL> insert into movie (id, name) values (1, 'Test');
1 row created.
SQL> commit;
Commit complete.
SQL> insert into length (id, length) values (1, 2);
1 row created.
SQL> commit;
Commit complete.
SQL> delete from movie where id=1;
1 row deleted.
SQL> select * from length;
no rows selected
Я подозреваю, что ограничение внешнего ключа на вашем столе length
не имеет положения ON DELETE CASCADE
вы думаете, что он делает. Возможно, вы создали эту таблицу ранее без этого предложения, и когда вы попытались снова создать эту таблицу с помощью ON DELETE CASCADE
, вы не заметили, что SQL Developer не смог создать таблицу? (Создание таблицы второй раз завершится неудачей, потому что таблица уже существует.)
Попробуйте опустить таблицу length
и создать ее снова.
Какие СУБД вы фактически используете? varchar2 НЕ является допустимым типом сервера sql-сервера. Это Oracle? –
К сожалению, это Oracle (разработчик SQL) – Linz
Опция 'CASCADE' работает в другом направлении. Если вы удалите по длине, он удалит ссылки на строки в дочерней таблице. Проверьте определение отношений. – Alfabravo