Supposons que j'ai une table et un index sur elleComment une table UPDATE est-elle gérée par un SGBDR?
original simple table A
------------------------
rowid | id name
123 | 1 A
124 | 4 G
125 | 2 R
126 | 3 P
index on A.id
-------------
id rowid
1 123
2 125
3 126
4 124
À ce stade, j'exécuter cette instruction DML
UPDATE A SET id = 5 WHERE id = 4
Que se passe exactement quand cette instruction est exécutée?
a)
BEGIN
go to index
search for `id == 4` (B tree index generally)
find that `rowid = 124`
go to that location
update id in the table
come back (? I am not sure)
update the index
END
b)
BEGIN
go to index
search for `id == 4` (B tree index generally)
update the id value in index
find that `rowid = 124`
go to that location
update id in the table
END
c) Quelque chose d'autre se passe entièrement
Comme cela pourrait dépendre de la base de données elle-même, comment cela arrive dans Oracle?
Je suppose que les implémentations varient et beaucoup d'entre elles seront par défaut c) plutôt que d'être simplement fendue en a) ou b) ... – meagar
Est-ce que ce travail est fait? –
@Henk: Non. J'essaie juste de comprendre comment cela fonctionne. C'est un scénario que j'ai inventé. – Moeb