Stale simply means - the opposite of fresh.
Example:
Bread hardens when stale.
Air smells musty when stale.
Water tastes like metal when stale.
Spoil means the quality of the item is damaged. The item is tainted, putrid, and nasty - if the item is food, it will probably make you sick. After a food spoils it goes rotten.
"go bad" refers to the time it will spoil.
Example:
The milk will go bad if it is not refrigerated.
The meanings are not exclusive to any type of food, they refer to different stages of the decomposition process.