Согласно Oracle DocumentationПочему мы не можем использовать ROWID в качестве первичного ключа?
Вы не должны использовать ROWID в качестве первичного ключа таблицы. Если вы удалите и вставьте строку с помощью утилит импорта и экспорта, например, , то ее значение может измениться. Если вы удалите строку, то Oracle может переназначить свой rowid новой строке, вставленной позже.
Я не понял фактическую причину. Означает ли это, что когда мы используем утилиты импорта/экспорта, тогда мы не должны использовать ROWID в качестве первичного ключа, или мы никогда не должны использовать ROWID в качестве первичного ключа?
Как объяснялось выше, когда мы удаляем строку и снова вставляем, то тот же ROWID может получить назначение, но с другой стороны строка уже была удалена, поэтому не будет никакой проблемы, если мы получим такой же ROWID. Не так ли? Может ли кто-нибудь объяснить это на каком-то примере?
В сценарии удаления представьте, что происходит со всеми данными в других таблицах, которые ссылаются на исходную строку по ее rowid. – Mat
Если мы использовали 'cascade delete', то? – Ravi
Да. Или если у вас есть данные в другой системе, которая использует одну и ту же ссылку. И сценарий экспорта/импорта не является единственным, который вызывает изменения в строке. Также перемещаются таблицы («reorg»). – Mat