公元290年,晋武帝死,太子司马衷继位,是为晋惠帝。惠帝是个白痴,除了享乐以外,什么事也不懂。时值天下荒乱,百姓多饿死,他得知后竟说:“为什么不吃肉粥?”这样糊涂的皇帝,自然无法掌管朝政,由他的外祖父杨骏辅政,独揽了晋王朝中央大权。惠帝的皇后贾南凤,是一个有政治野心和阴险毒辣的女人,她不满意中央大权落入杨氏手中。公元291年,贾后与宫中侍从官阴谋策划,秘召都督荆州的楚王司马玮带兵进京(今河南洛阳),挟惠帝下诏杀死杨骏、杨珧、杨济兄弟3人,其亲族和党羽被株连而死者达几千人。贾后又废黜杨太后为庶人,迫使她绝食而死。晋朝内部大乱就从这次宫廷政变开始了。
贾后掌权后,大树自己的党羽,除了依靠族兄贾模、内侄贾谧,母舅郭彰这些亲党外,还起用当时的名士张华为司空,世族裴頠为尚书仆射,裴楷为中书令,王戎为司徒,令他们4人共管京城机要。由于这几个人都具有一定的统治经验,又和贾模等人能“同心辅政”,所以从公元291年至299年的七、八年间,贾后还能维持一个相对稳定的局面。
司马冏自辅政后,为了巩固自己的地位,久专朝廷大权,把本来可以立为皇太弟的司马颖和长沙王司马乂改立惠帝弟清河王司马遐之子,年仅8岁的司马覃为皇太子。这一招,不但导致司马颖与司马冏关系的破裂,而且也引起司马乂的不满。公元302年十二月,司马卹联合西镇关中的河间王司马冏反对司马颙。司马颙出兵进攻洛阳,军抵新安(今河南渑池县东)。在洛阳的司马乂也举兵讨冏,双方军队在京城内展开激战。一时间,飞矢如雨,火光冲天,混战了3天3夜,冏败,为乂所杀。长沙王乂掌握了政权。
成都王司马颖在邺城遥执朝政期间,政治腐败,比以前司马冏,司马乂执政时还要坏,大失人心。因此,东海王司马越统率洛阳禁军,拥戴惠帝讨伐司马颖,结果在汤阴(今河南汤阴县西南)战败,惠帝被俘至邺城。司马越逃往自己的封国(今山东郯城县北)。河间王司马颙命部将张方率兵占领了洛阳,不久,幽州刺史王浚与并州都督司马腾联兵攻破邺城,战争进一步扩大。司马颖挟惠帝出奔洛阳,皆落入张方之手,又被迫前往长安(今陕西西安市西北)。
公元305年七月,司马越在山东再次起兵,西向进攻关中。次年攻入长安。司马颙和司马颖败走,相继被杀。越迎惠帝还洛阳,随后把惠帝毒死,另立惠帝的弟弟豫章王司马炽为帝,是为晋怀帝。晋朝大权最后落入司马越手中。至此,“八王之乱”才告结束。