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
then looping over
allMyUniqueIds will return you all your