西晋太熙元年(290年),晋武帝死后,惠帝即位,年32岁,天生痴呆,由武帝的杨皇后之父杨骏辅政。武帝因为自太康年后期始便不留心政事,宠幸后党,以致使杨骏、杨珧、杨济独揽大权,时号“三杨”。武帝死后,杨骏竭力排斥异党,亲宠左右。
当时汝南王司马亮为大司马、出督豫州,镇守许昌,司空石鉴与中护军张劭监统山陵,有人传告杨骏,说汝南王司马亮到许昌,想举兵讨伐杨氏。杨骏听后十分恐惧,便找杨皇后商量,杨皇后让惠帝写了一封手诏,命令石鉴与张劭去讨伐汝南王司马亮。石鉴认为这样不妥,按兵不动,只是派人秘密窥视情况的发展。见汝南王司马亮并没有什么迹象,于是杨骏也就不再催促。
元康元年(291年),生性酷毒、与杨氏嫌恨甚深的贾后,不甘杨氏的专政,便带信给汝南王司马亮,让他连夜起兵讨伐杨骏。汝南王司马亮说:“杨骏凶暴,死期不远了,不足为虑。”贾后又带信让楚王司马玮率兵前来。楚王司马玮先入朝,请惠帝废除杨骏,东安公司马繇则率领殿中四百人尾随其后。大傅主簿朱振听说此事后便对杨骏说:“你可以派人烧了云龙门,然后追索带头起事的。再打开万春门,调来东宫及外营的部队,拥翼皇主子,进宫抓起犯乱者。”杨骏素来胆小,正遇上殿中的兵马赶到,杀了杨骏。贾后接着秘密授令诛杀杨氏亲党,灭其三族。杨皇后在宫中发现叛乱已起,便在布帛上写着:“救太傅者有赏”,射到城外,事平后,贾后以杨皇后为杨骏同谋,将他废为庶人,第二年杨皇后绝食而死。
杨骏被杀之后,便由汝南王司马亮与太保卫瓘共同辅政。以楚王司马玮为卫将军,进东安公司马繇为王。司马马繇兄长司马澹对司马繇一直很讨厌,而司马繇也想因这次平乱后独揽朝政,于是王澹便到汝南王司马亮处离间。司马亮听了王澹的话,免了司马繇的官,又将他废徙到带方(今朝鲜镜内)。楚王司马玮年少果锐,事刑威厉,朝廷对他不放心,汝南王司马亮与卫瓘商量,让他回自己的藩地。楚王司马玮于是便到贾后处谮言亮与卫瓘。贾后便让惠王下诏废除二公,并命楚王司马玮行事,杀了司马亮与卫瓘。楚王司马玮的亲信这时献计说:“你可应趁用兵之时,也杀了贾后的族兄贾模、从舅郭彰等,以此匡正王室,安抚天下。”楚王司马玮犹豫不决。天亮时,贾后则先走一步,以楚王司马玮矫诏专杀之罪,杀了楚王司马玮。此后,贾后专权,以张华为侍中、中书监、裴頠为侍中,与贾模一同辅政。
不久,贾后与太子遹之间矛盾加剧。永康元年(300年),贾后矫诏废杀太子。赵王司马伦、孙秀趁机命翊军校尉齐王司马冏带兵入宫中,将贾后抓起,废为庶人,旋又杀之,灭贾氏族党,并杀死贾后亲信张华、裴頠等。接着,赵王司马伦自任使持节,督中外诸军事、相国、侍中、以孙秀为中书令,控制了朝廷的大权。
淮南王司马允此进正担任中护军,密养敢死之士,密谋驱逐赵王司马伦。赵王司马伦听说后恐惧,将淮南王司马允转升为大尉,另外多加优厚,想以此夺取他的兵权。淮南王司马允知其阴谋,便假称有病不赴。赵王司马伦派御史逼淮南王司马允前行,并扣留了他的官属,指责他大逆不道。允无奈,就率领国兵及帐下的七百人出讨赵王伦。快到宫前时,尚书左丞王舆见势不好,便关闭了东掖门,不让淮南王允进去,司马允只好不去围攻相府。当时赵王司马伦之子虔正在门下省,便派司马督护伏胤率领四百人从宫中出来,诈称援助,淮南王司马允急需救助,不知是计,就下车接见,被伏胤杀死。孙秀一直与潘岳、石崇有隙,这时就趁机指责他们是淮南王党,也一起捕起杀死。
永康二年(301年),赵王司马伦专权心切,便将惠帝移到金墉,自立为王,改元建始。不久,齐王司马冏起兵反赵王司马伦,成都王司马颖在邺(今河南临漳),常山王司马冏在其藩地,也一同起兵响应。河间王司马颙在关中,派张方去援助赵王司马伦,但一见齐王司马冏,成都王司马颖势力甚大,便反过来又支持二王。由于诸王的投入,“八王之乱”开始发展为一场大混战。四月,左卫将军王舆与尚书广陵公漼带兵入宫,杀了孙秀,先逐赵王伦归第,随后一同杀了,将惠帝重新从金墉迎回。齐王冏带兵至洛阳,甲兵十万,旌旗招展,震动京师,惠帝拜为大司马,都督中外军事,加九锡之命,又封成都王司马颖为大将军,录尚书事也加九锡。但卢志却不出来私下劝司马颖推崇齐王冏,以显无私欲之心。成都王司马颖授受了他的建议,以母亲身体不佳为托辞不受九锡,回到邺城。
齐王冏辅政,一开始就大建官邸,沉湎酒色,不入朝见,外事惟亲是宠,选举不均,以至朝廷侧目,海内失望。司马冏兄东莱王司马蕤与王舆一起计谋废除齐王司马冏,但事情泄密,东莱王冏蕤被免为庶人,王舆被杀。
永宁二年(302年),河间王司马颙起‘兵反齐王冏,成都王司马颖响应,长沙王也率兵前来协助。长沙王见了成都王司马颖,说:“天下之事,应以先帝之业为先,我们应当维护它。”听者对他都有所惧怕。李含这时便对河间王司马颙说:“可以放令让长沙王去讨伐齐王冏,并且同时把这事预先透漏给齐王冏,齐王冏一定会起兵灭杀长沙王,然后再将罪归于齐王冏,消灭齐王冏而立成都王司马颖。”河间王司马颙听从了李含的计策。果然,齐王冏派将领董艾去袭击长沙王,双方交战后齐王冏部败阵。长沙王抓住了齐王冏,并将他杀了。河间王司马颙原以为冏弱而强,可是结局却出乎意料,于是便发布通告,动员诸方力量讨伐长沙王。
太安二年(303年),成都王司马颖、河间王司马颙起兵攻打长沙王。河间王颙以张方为都督,领精兵七万开赴洛阳,成都王司马颖以陆机为将军,督王粹、牵秀、石超等二十余万人,浩浩荡荡向洛阳逼近。惠帝暂避洛阳西十三里桥,参军皇甫商率兵在宣阳(属河南)抵抗张方,被张方击败。张方进入洛阳,烧毁清明、开阳二门,死者万计。石超带兵追赶惠帝的随从。攻下缑氏(河南偃师)后,放火焚烧。不久,王师回旋洛阳,在东阳门击破牵秀,在建春门击破陆机。长沙王奉惠帝之命讨伐张方,在洛阳城中交战,张方部下见惠帝乘舆前来,便往后退去,张方阻止不住,大败而去,退到十三里桥。这时人心沮丧,有人便劝张方趁夜溜之大吉,张方说:“兵之胜败是常事,贵在因败而反过来取胜。我们可以出其不意袭击洛城,这才叫做用兵之奇。”于是在夜里偷偷带兵逼进洛城。长沙王刚刚打了胜仗,有些麻痹,这时率兵出战,被张方打败。张方围城多日,但始终不能攻克,想撤回长安。
这时,被张方所围的洛阳缺粮大饥,殿中的一些将领也苦于死守,便密谋趁夜抓住长沙王,逼东海王司马越出来作主,并通知惠帝免除长沙王的职位,将他送到金墉。张方则趁机派部将赶到金墉,杀了长沙王。八王之中,长沙王是最有才略的一个。等到长沙王死,大局便越发不可收拾。永兴元年(304年),东海王越于是开城迎成都王司马颖,以成都王司马颖为丞相,东海王越为尚书令。成都王司马颖仍率部还邺城,张方也在掠劫奴婢万余人后西还。
该年七月,右卫将军陈眕及长沙王的旧将上官已等人起兵讨伐成都王司马颖,惠帝也亲自北征,聚兵十万以上,逼近邺城。成都王司马颖派石超迎战,结果王师被打败,并抓获了惠帝,侍中嵇绍(嵇康子)保护惠帝,被兵士所杀。河间王司马颙起兵来协助成都王司马颖,命令张方率兵进入洛阳,东海王越逃回东海。
于此同时,王浚在幽州起兵,联合鲜卑、乌桓及并州刺史东赢公腾,南下讨伐成都王司马颖。成都王司马颖命石超等人抵抗,被击败。邺中大震,人心涣散。卢志劝成都王司马颖将惠帝送回洛阳,五天后至洛城。王浚乘胜追击,攻克邺城,杀烧劫掠,荼毒百姓。张方也趁势逼惠帝走洛阳,行前,军士抢劫后宫、分争府藏,一时魏晋以来的宝藏,一扫而空。十一月,惠帝一行到达长安,立豫章王炽为皇太帝,以河间王司马颙都督中外军务,张方为中领军,录尚书事,领京兆太守。
永兴二年(305年),东海王司马越起兵征伐河间王司马颙及张方,王浚等推东海王司马越为盟主,东海王司马越于是以刘乔为冀州刺史,以范阳王司马虓领豫州。刘乔与范阳王九虎有隙,河间王司马颙便命其部将配合刘乔一起攻打范阳王司马虓。司马虓失败,派人去幽州求兵,得到突骑八百余人,打败了刘乔。河间王司马颙命令刘弘等去援助刘乔,刘弘认为张方一伙残暴无度,一定会败,便派合得到东海王司马越处求和。成都王司马颖进驻洛阳,与河间王司马颙一同抵御东海王司马越。永兴三年(306年),范阳王司马虓渡官渡(河南中牟县北),攻下荥阳,杀死石超,分兵许昌,又破刘乔。河间王司马颙听说刘乔败,大为惊惧,心想罢兵,但又恐怕张方不会答应,正犹豫不定时,有人劝他还是赶紧杀了张方,以此谢罪。于是河间王司马颙派郅辅去杀了张方,将首级示之东军,并要求与东海王司马越求和。
东海王司马越不答应,发兵西进。成都王司马颖从洛阳逃至华阳。东海王司马越派其部将祁弘等进兵长安迎惠帝。河间王司马颙知道大势不妙,先派人杀了郅辅,然后派彭随等前去迎战祁弘,但大败而归。河间王司马颙又派马瞻等低御祁弘部队,也战败而亡。河间王司马颙一人乘马,逃往大臼山。祁弘于是率兵进入长安,所部鲜卑在城中大掠,杀人二万人余。不日便奉命护惠帝返回洛阳。惠帝以东海王司马越为太傅,录尚书事。成都王司马颖则从华阳过武关,想回自己藩地,被刘弘中途截住,成都王司马颖丢下母亲、妻子,单车与二子渡河奔朝歌,想搜罗故将残兵,归属公师藩,被冯嵩在中途抓住,送到邺城,不久被杀。河间王司马颙逃到南山后,此时正被糜晃等围在城中,不久诏他为司马,河间王司马颙信以为真,结果在中途为南阳王司马模部将杀死在车中。永兴三年十一日,惠帝中毒而死,传为东海王司马越所害,太帝炽即位,是为怀帝。“八王之乱”自此结束。
八王之乱前后历经十六年,给了建立不久的晋王朝以毁灭性的打击,从内部挫伤了它的元气,并因无暇顾及边防,而使少数民族的贵族能乘机起兵,扶植势力,对此后历史产生了巨大的消极作用。