2016-05-31 1 views
5

Я только что нашел, что производная таблица обновляется в оракуле. При обновлении производной таблицы в результате обновляется таблица, на которой она основана.Почему производная таблица обновляется в Oracle?

Пример UPDATE (SELECT * FROM T where T.col1='val1') as D SET D.col2 ='some_val'

После того, как в примере SQL выполняется, таблица Т будет обновляться.

Я не понимаю, почему Oracle поддерживает эту функцию.

Как указано в this question, в mysql производная таблица не является обновляемой.

+2

Почему бы и нет? Вопрос в том, почему MySQL говорит, что это не так. – jarlh

+0

Я обновляю производную таблицу, она должна быть временной таблицей. Но Oracle обновила базовую таблицу, поэтому я удивился. –

ответ

5

Для реляционных баз данных может быть поучительно рассматривать Codd's Rules.

Правило 7:

Правило 7: высокий уровень вставки, обновление и удаление:

Возможности обработки базового отношения или производного отношения в качестве одного из операндов относятся не только для извлечения данных, а также для вставки, обновления и удаления данных.

Мой акцент - и обратите внимание, что одним из важных аспектов, что многие люди неправильно с реляционными базами данных является то, что слово «отношение» или «реляционная» означают - отношения являются так называемые таблицы в SQL , Многие люди считают, что «реляционная» в реляционных базах данных такая же, как отношение в модели отношений сущностей, и поэтому перескакивает в предположение, что реляционная связь каким-то образом относится к, например, Внешние ключи.

Теперь я не говорю, что SQL, как воплощенный в стандарте ANSI, так и воплощенный в каком-либо конкретном продукте, является полной реализацией правил Codd (действительно, правило 6 довольно проблематично), но есть наименее попытки реализовать их в некоторых продуктах.

Смежные вопросы