mapping are unique (or many-to-one relationship in relational database jargon). For example if id 123 is mapped to name Vitalik. Id 123 can only lead to Vitalik and no other value ! However others id (e.g. 947) can also point to Vitalik (many-to-one relationship).
If you update the mapping 123 => Vitalik
to 123 => Gavin
for example, then well obviously the id 123 will be pointing to Gavin and Gavin only.
I am not sure if it is obvious or not but for the sake a clarity, in those lines
DetailsTable[id].id = id;
DetailsTable[id].name = name;
you do not update your mapping at all but only the fields in your structure. Also if your ids are two different values I would find better names. If your id in the struct is the same as the id for the mapping there is no point of storing the id in the struct again (this creates redundancy and will just add overhead for keeping the two values sync).
also you cannot loop over mapping neither knowning which ids have been initialized (all mapping are valid) if you do not keep track of your ids (either in your smart-contract or off-blockchain in a database)
In your smart contract your could create an array for that
bytes[] allMyUniqueIds;
then looping over allMyUniqueIds
will return you all your Details
struct