永宁元年(公元301年),赵王司马伦篡位登基。
司马伦虽然登基称帝,但他知道自己得位不正,为了安抚人心,稳固地位,他大肆封赏。西晋的高官会在帽子上插貂尾以作装饰,可是司马伦封赏的高品级官员过多,以致于貂尾不够用,只能用狗尾,这便是“狗尾续貂”的来源。司马伦对官员的封赏到什么地步呢,按常例来说侍中一般只有四位,可是司马伦任命的侍中多达百位;底层的官员如县令都被封为侯,杨骏、司马亮也是滥封爵位,却远比不上司马伦。
司马伦在安抚封赏官员的同时,对宗室也多加防范。当时的齐王司马冏、成都王司马颖、河间王司马颙都拥有强军,坐镇方面。司马伦一方面提高他们的地位,给与开府仪同三司的权力,一方面将他们的僚属全换成自己的党羽,企图架空三王。
即便司马伦做出种种措施想要稳定局面,可不服他的依然不服他,齐王司马冏就想要讨伐司马伦。三月,浊泽有人聚众反叛,司马伦派管袭为齐王的军司讨伐叛军,齐王司马冏趁机杀了管袭,掌控军队讨伐齐王。司马冏一边向成都王司马颖、河间王司马颙、常山王司马乂(之前为长沙王被贬)、南中郎将司马歆寻求支援;一边向天下发布檄文,号召大家讨伐赵王司马伦身边的逆臣孙秀(司马伦心腹,司马伦时期政令均出自孙秀)。
司马颖、司马乂、司马歆在经过一阵考量后都宣布支持司马冏。唯独司马颙一开始支持司马伦,派部将张方前去支援,走到华阴时听说联军势大,又转而支持司马冏。
司马伦和孙秀一听说诸王派兵讨伐他,很害怕,连忙派兵前去阻挡。这时便看出司马伦的昏庸无能了,大军在前线战斗,司马伦自己却在宫中求神拜鬼,让男巫选择作战的日期。他的手下更是荒唐,司马伦部将张泓多次在前线取得胜利,同为将军的孙辅、徐建却率兵逃回,谎称大军兵败、张泓战死。后来前线失利,二人却谎称击败了司马冏。
闰月初一,出现了日食,而后几天,司马伦一方连连战败,孙会,许超、士猗等人都逃了回来。初七、左卫将军王舆和尚书广陵公司马漼发动政变,迎回惠帝司马衷,逼迫司马伦退位,将其囚禁于金墉城,后司马伦及其子皆被赐死。
这次战乱后,联军取得胜利,司马冏封为大司马,加九锡,如文帝、武帝辅政曹魏的旧事例;司马颖为大将军,假九锡、假黄钺、入朝不趋、剑履上殿;司马颙为太尉、侍中、加三赐之礼;司马乂为抚军大将军,领左军;司马歆进爵为王。
这次讨伐司马伦,功劳最大的两个人是司马冏和司马颖,两人都想争取执政权力。适时,卢志劝说司马颖退让养望,聚拢人心,司马颖同意了,就这样,中枢的大权暂时落到了齐王司马冏手中。
司马冏刚掌权时,任用有名望的人治理地方,做出一副励精图治的样子。当时惠帝的子嗣都死完了,司马颖理论上有继承皇位的可能,为了长久把持权力,他立仅有八岁的清河王司马覃为太子,拉拢东海王司马越为司空、中书监。渐渐的司马冏也开始骄纵奢侈,耽于享乐,任人唯亲,司马冏打败司马伦得来的人望已然失去。
这时成都王司马颖唆使长沙王司马乂讨伐齐王司马冏,司马颖想等司马冏击败司马乂后,再出面击败司马冏以夺取大权。十二月,司马乂与司马冏交战于洛阳城内,司马冏战败被俘,后被杀。司马乂入主洛阳。
虽然司马乂入主洛阳,但他十分尊重司马颖,事无巨细,都去建邺请示司马颖,可时间一长,两人也渐渐有了怨隙,河间王司马颙同司马颖交好,也不喜欢司马乂。
太安二年(公元303年)七月,河间王司马颙和成都王司马颖借口李含被杀,起兵讨伐司马乂。司马颖和司马颙虽然兵马众多,但司马乂倚靠洛阳坚称多次打退联军,洛阳城内人心团结,士卒可用。
永兴元年(公元304年),联军围城日久,城内的粮食渐渐不够用,当时东海王司马越也在城内,司马乂以他为臂膀。司马越见城内粮食不足,事不可为,发动政变,囚禁了司马乂献城,而后将司马乂杀死。
至此司马颖大权在握,三月废掉当时的皇后羊氏,太子司马覃,随后立自己为太弟。司马颖本就不如司马乂得人心,掌握权力后又奢靡日甚,宠溺小人,大家对他大失所望。
东海王司马越抓住机会,趁司马颖长期待在建邺,攻入皇城,侍奉皇帝向北讨伐司马颖,向天下发布檄文,号召大家勤王。但是初战司马越过于大意,被击败,独身逃回东海,皇帝重新落到司马颖手中,司马颖却又被幽州都督王浚击败,逃到洛阳。这时的洛阳已被司马颙部将张方占领,于是朝廷大权落入司马颙手中。
东海王司马越虽然初战失败,但逃回东海的他并不承认失败,他联合范阳王司马虓向洛阳进军。司马颙联合司马颖对抗,但是战败,于是大权落入司马越手中。
光熙元年(公元306年),十月,司马虓去世,幽禁于范阳的司马颖被长史刘舆所杀。十二月,封诏入京的司马颙被南阳王司马模所杀。
八王之乱就此结束,但长达十六年的动乱给西晋王朝带来了毁灭性的打击。这十六年中吏治混乱;各地乱兵不断,较大的有四川李特的“流民军”,北方的“乞活军”等等;同时北方少数民族纷纷叛立,如匈奴,羯族等。诸王不顾这些动荡,只为自己的利益互相征战,导致国家衰弱,军力衰退。这是后来五胡乱华,西晋灭亡的重要原因。