战国属赵,秦置平城县。北魏天兴元年于此定都。北齐天保七年改称恒安镇,北周置云中县,隋改为云内县。唐开元二十年(732年)置云州,天宝元年(742年)改为云中郡,乾元元年(758年)复为云州。辽重熙十三年(1044年)于今大同城建西京,十七年(1048年)置大同县附郭。自此,大同县名沿用未改。金西京路总管大同府。元因之为西京路,至元二十五年(1288年)更名大同路;至大元年(1309年)改属中都留守司,四年(1311年)复属宣慰司。至元二年(1265年)云中县并入大同县。明洪武七年(1374年)为大同府治。抗日战争时期分设东、西大同县。
1949年5月解放后,大同城区建为大同市,属察哈尔省。1952年,大同市、雁北专区由察哈尔省划归山西省;大同市为山西省辖市;原由察哈尔省直辖的天镇县划入雁北专区,专署驻大同市,辖大同、阳高、天镇、广灵、灵丘、浑源、应县、怀仁、山阴(驻岱岳镇)、朔县、平鲁、右玉、左云等13县。1954年,大同、怀仁2县合并,改名为大仁县(驻大同市),雁北专区辖12县。
1958年撤销雁北专区,改设晋北专区,专署驻大同市;原由省直辖的大同市及原雁北专区所属大仁、天镇、灵丘、应县、朔县、左云、阳高、广灵、浑源、山阴、平鲁、右玉等12县及原忻县专区所属忻县、代县、五台、阳曲、岚县、岢岚、河曲、五寨、宁武、崞县、繁峙、定襄、静乐、兴县、保德、偏关、神池等17县划入晋北专区。撤销阳曲县,并入太原市;撤销大仁县,并入大同市和山阴县;撤销应县,并入山阴县;撤销忻县、定襄2县,合并设立忻定县(驻原忻县城)。撤销崞、代2县,将崞县部分地区并入宁武县;代县部分地区并入繁峙县;崞、代2县其余地区合并设立原平县(驻原崞县城)。撤销岢岚县,并入五寨县;撤销神池县,并入五寨、宁武2县;撤销岚县,并入静乐县;撤销保德县,并入河曲、兴县2县;撤销偏关县,并入河曲县;撤销天镇县,并入阳高县;撤销广灵县,并入浑源县;撤销平鲁县,并入朔县;撤销右玉县,并入左云县。晋北专区辖大同市及忻定、原平、繁峙、五台、静乐、兴县、河曲、五寨、宁武、阳高、灵丘、浑源、山阴、朔县、左云等15县。
1960年,恢复广灵、保德、偏关、应县4县;原平县由原崞县城迁驻原平镇;晋北专区辖1市、19县。1961年撤销晋北专区,复设雁北专区,专署驻大同市;大同市改由省直辖;将忻定、宁武、原平、繁峙、五台、静乐、兴县、河曲、五寨、保德、偏关等11县划归忻县专区;恢复天镇(驻天镇县城)、平鲁(驻井坪镇)、右玉(驻右玉县城)3县;雁北专区辖11县。1964年,复设大同(驻大同市)、怀仁(驻怀仁镇)2县,由大同市领导。1965年,大同市所属大同(驻大同市)、怀仁2县划入雁北专区(辖13县)。1970年,雁北专区改称雁北地区,地区驻大同市;辖大同市及大同(驻大同市)、阳高、天镇、广灵、灵丘、浑源、怀仁、应县、山阴(驻岱岳镇)、朔县、平鲁(驻井坪镇)、左云、右玉等13县。1971年,大同县驻地由大同市迁西坪。1972年,大同市改由省直辖,雁北地区辖13县。1973年右玉县驻地迁梁家油坊。1989年1月,成立朔州市,辖朔城区(原朔县)、平鲁区(原平鲁县)、山阴县。
1993年6月25日,国务院《关于山西省撤销雁北地区调整大同市、朔州市行政区划的批复》(国函[1993]93号)批复:撤销雁北地区;将原雁北地区管辖的左云、大同、阳高、天镇、浑源、广灵、灵丘7县划归大同市领导;将原雁北地区管辖的怀玉、右玉、应县3县划归朔州市领导。山西省省委、省政府下发《关于雁北地区与大同市合并,实行市领导县体制的实施方案》。7月10日正式实施。
2000年第五次人口普查,大同市常住总人口3001508人,其中,城区537598人,矿区460714人,南郊区422517人,新荣区105915人,阳高县262565人,天镇县187832人,广灵县162548人,灵丘县209713人,浑源县325763人,左云县163366人,大同县162977人。
2010年第六次人口普查,大同市常住总人口3318054人,其中,城区723013人,矿区500155人,南郊区405864人,新荣区108482人,阳高县272488人,天镇县206009人,广灵县182613人,灵丘县234004人,浑源县343486人,左云县156163人,大同县185777人。
2015年末,大同市常住人口340.64万人。共有40个街道、33个镇、66个乡(合计139个),332个居委会、1969个村委会(合计2301个)。