西晋建立后,晋武帝认为魏朝的灭亡是没有给皇族子弟权力,使皇室孤立所致。所以,即位以后,他封了二十七个同姓王,每个王国都有自己的军队,王国里的文武官员都由诸侯王自己选用。他以为这样做亲属子弟会支持皇室,司马氏的统治就可以稳固了。没承想这样一来,反而种下了祸根。
晋武帝死后,司马衷即位,是为晋惠帝。晋惠帝是个呆傻儿,情理不分,只会玩耍。有一次他在华林园听到蛤蟆叫,竟问左右它是为官叫还是为私叫,随从的人知道跟他说不清,就随口回答说:“在官家的地里叫唤的,自然是官叫;在私人地里叫唤的,就是私叫。”还有两次,臣子向他汇报老百姓没有饭吃,到处饿死的情况,希望他下令赈济灾民,结果他说了句令人哭笑不得的话:“没有饭吃,为什么不去吃肉粥?”这样的人当然不会管理国家,于是军政大权落到杨太后的父亲杨骏手中。杨骏结党营私,排除异己,引起皇后贾南风与晋宗室的强烈不满。
贾皇后不甘心让杨太后和太后娘家的人掌权,就暗中等待时机。机会终于来了。皇宫卫队头目孟观、李肇因为杨骏对他们高傲无礼,想杀掉杨骏。贾后心腹太监董猛将二人引荐给贾后,为了慎重起见,贾后叫他们联系宗室诸王。而诸王大都心怀鬼胎,楚王玮随即请旨进京。楚王玮一到京城,贾后即以惠帝名义下诏,宣布杨骏谋反,很快皇宫卫队配合楚王玮兵围杨骏太师府。杨骏措手不及,被乱兵杀死,依附杨家的官员无一幸免。
杨骏被杀后,汝南王亮进洛阳辅政。他想独揽大权,可是兵权在楚王玮手里。两个人就产生了矛盾。贾后嫌留着汝南王亮碍事,就假传晋惠帝的密令,派楚王玮把汝南王亮抓起来杀了。
楚王玮本是贾后的同党,但是贾后怕他权力太大,当天晚上又宣布楚王玮假造皇帝诏书,擅自杀害汝南王,把楚王玮办了死罪。楚王玮知道上了贾后的当,大叫冤枉,可已经没有用了。
从那以后,朝廷没有辅政的大臣,名义上是晋惠帝做皇帝,实际上是贾后专权。贾后掌权七八年,骄横跋扈,胡作非为。太子不是贾后生的,贾后怕他长大后自己的地位不保,就千方百计想除掉太子。
有一回,贾后事先叫人起草了一封用太子口气写的信,内容是逼晋惠帝退位,然后假意请太子喝酒,把他灌得烂醉,趁太子昏昏沉沉的时候骗他把那封信抄了一遍。第二天,贾后叫晋惠帝召集大臣,把太子写的信交给大家传看,宣布太子谋反。大臣们怀疑这封信不是太子写的,贾后要大家核对笔迹。大家一看果然是太子的亲笔,不敢再说什么,贾后就把太子废了。
朝廷大臣对贾后的凶狠本来就十分不满,现在见她废掉太子都十分气愤,议论纷纷。掌握禁军的赵王伦觉得这是个好机会,想起兵反对贾后,但他又怕让太子掌了权,也不好对付,就四处散布消息,说大臣正在秘密扶植太子复位。贾后听到这个谣传,真的害怕起来,派人毒死了太子。这样一来,赵王伦抓住了贾后的把柄,与齐王冏密谋带兵进宫逮捕贾后。
贾后见齐王冏带兵进宫,大吃一惊,说:“你们想干什么?”齐王冏说:“奉皇上的诏书,特来逮捕你。”贾后说:“皇上的诏书都是我发的,哪里还有什么别的诏书!”贾后大声呼喊,指望惠帝来救她。最后,赵王伦将她斩杀。
赵王伦掌握了政权,野心更大。他当了相国还不满足,过了一年,干脆把晋惠帝软禁起来,自己称帝。他一即位,就把他的同党,不论文官武将,还是侍从兵士,都封了官职。那时,官帽上都用貂的尾巴做装饰,由于赵王伦封的官实在太多,官库里收藏的貂尾不够用,只好找些狗尾巴来凑数。所以,民间就编了歌谣来讽刺他们,叫做“貂不足,狗尾续”。
赵王伦篡夺帝位,激起了其他宗室诸王的反对,齐王冏首先起兵讨伐赵王伦,并得到成都王颖、河间王颙的响应。三王联军与赵王伦军在洛阳附近战斗了两个多月。结果,赵王伦兵败被杀。同时,赵王伦的亲信将领王舆也在京城内起兵反伦,迎惠帝复位。齐王冏入京辅政,掌握了朝政大权。
齐王冏辅政后,为了巩固自己的地位,久专朝廷大权,把本来可以立为皇太弟的成都王颖和长沙王乂撇开,立惠帝弟清河王之子,年仅八岁的司马覃为皇太子。结果这不但导致成都王颖与齐王冏关系破裂,而且引起长沙王乂的不满。
公元302年十二月,成都王颖联合西镇关中的河间王颙反对齐王冏。河间王颙出兵进攻洛阳,军抵新安。在洛阳的长沙王乂也举兵讨齐王冏,双方军队在京城内展开激战。一时间,飞矢如雨,火光冲天,混战了三天三夜,齐王冏战败,为长沙王乂所杀,长沙王乂掌握了政权。
公元303年八月,河间王颙派大将张方率领精兵七万联合成都王颖的二十多万大军,借口长沙王乂“论功不平”进攻京城。由于双方兵力悬殊,洛阳城危在旦夕。这时城内的统治集团出现分裂,公元304年正月,东海王越勾结部分禁军,拘禁长沙王乂,向外兵求和,并把长沙王乂交给张方用火活活烤死了。成都王颖进入洛阳,虽然当了丞相,但他仍然回到自己的根据地邺城(今河北临漳县西南),遥控朝政,废太子覃而自兼皇太弟,一时政治中心由洛阳移到邺城。
成都王颖在邺城遥控朝政期间,政治腐败,比以前齐王冏、长沙王乂执政时还要坏,大失人心。因此,东海王越统率洛阳禁军,拥护惠帝讨伐成都王颖,结果在荡阴战败,惠帝被俘至邺城。
东海王越逃往自己的封国,河间王颙命部将张方率兵占领了洛阳。不久,幽州刺史王浚与并州都督司马腾联兵攻破邺城,战争进一步扩大。成都王颖挟惠帝出奔洛阳,落入张方之手,后又被迫前往长安。
公元305年七月,东海王越在山东再次起兵,西向进攻关中,次年攻入长安。河间王颙和成都王颖败走,相继被杀。东海王越迎惠帝还洛阳,随后把惠帝毒死,另立惠帝的弟弟豫章王炽为帝,是为晋怀帝。晋朝大权最终落入司马越手中,至此,“八王之乱”才告结束。