A call to this predicate inserts a key pair into StorageName as
does storage_insert_keypair/4, and the key-value pair may be
queried via storage_find_keypair/3, just as with the
non-backtrackable updates described above. In addition, the key-value
pair can be removed from StorageName by explicit deletion.
However, the key pair will be removed from StorageName upon
failing over the insertion goal unless a commit is made to StorageName through the goal storage_commit(StorageName).
The exact semantics is defined by Transaction Logic [6].
Note it is the update itself that is backtrackable, not the key-value
pair. Hence, a key-pair may be (provisionally) inserted by a
backtrackable update and deleted by a non-backtrackable update, or
inserted by a non-backtrackable update and (provisionally) deleted by
a backtrackable update. Of course, whether such a mixture makes sense
would depend on a given application.