晋武帝司马炎在夺得政权以后,为了保住司马氏的天下,曾经大封自己的子侄兄弟做王,叫他们像众星拱月一样来拱卫皇室。当时分封的王有二十七个之多,其中有名的、势力较大的有楚王司马玮、汝南王司王亮、赵王司马伦、齐王司马同、成才王司马颖、河间王司马页、长沙王司马义、东海王司马越八人。
因为晋惠帝司马哀是个白痴,不会管理国家大事,所以他父亲晋武帝司马炎临死的时候,把大事托付给太尉杨骏,叫他辅佐皇帝,掌管军政大权。
杨骏是晋武帝的老婆杨皇后的父亲,是晋惠帝的外公,所以就倚老卖老,专权起来。可是晋惠帝的皇后贾南风,也是一个喜欢抓权的泼女人,不甘心让杨家的人掌权。公元291年,她命令司马玮带兵入朝,杀了杨骏,灭了他的三族;还杀了杨太后。杨骏一死,贾皇后请汝南王司马亮来辅政。司马亮也是喜欢抓权的人,他不愿意做贾皇后的傀儡,于是贾皇后让晋惠帝派司马玮去杀司马亮,等杀了司马亮以后,贾皇后又叫惠帝否认下过命令,反而说司马玮假传圣旨,把司马玮也杀了。这样,八个王被除掉了两个,贾皇后就夺得了全部大权。
可是贾皇后没有生儿子,她怕大权将来还要旁落,就假装怀孕,暗地里把妹夫韩寿的儿子抱来,当作自己生的儿子。有了这个抱来的儿子,贾皇后就废除原来晋惠帝已经立了的太子,并派人把他毒死,立自己抱来的儿子做了太子。这个消息传出以后,宗室群情激愤,都说贾皇后想篡夺司马氏的天下,就起来反对她。赵王司马伦借口贾皇后废杀太子,带兵入朝,杀死了贾皇后。接着,他又废掉惠帝,自己称帝。
镇守许昌的齐王司马同,听说赵王司马伦废了惠帝,夺得了皇位,心里很不服气,就向各处发出讨伐司马伦的檄文,号召大家起兵。成都王司马颖、河间王司马页也有夺取政权的野心,他们和齐王司马同联合起来,共同攻打司马伦。争权夺利的斗争在四个王之间展开了。经过两个多月的厮杀,牺牲了十万人的生命,最后司马伦兵败被杀。齐王司马同进入洛阳,他怕司马颖和司马页来跟他争权,就假装让惠帝恢复皇位,叫惠帝封他为大司马,在幕后操纵政局。
河间王司马页看穿了司马同的鬼把戏,就派兵两万,进攻洛阳,长沙王司马义也是一个有政治野心的人,他假装起兵响应司马页,看准一个有利的时机,选派一百多名骑兵,进洛阳,杀了司马同,控制了朝政大权。这时候,八个王已经死了四个,而争权夺利的斗争又在长沙王司马义、成都王司马颖,河间王司马页之间,继续展开了。
司马页和司马颖联合,共同对付司马义。他们一个从西面,一个从北面,进攻洛阳。司马义牢牢控制住惠帝,派兵抵抗。双方打得难解难分的时候,正在洛阳城里的东海王司马越,想乘机捞一把,就利用皇城的禁卫军,在夜里捉住司马义,把他用火烧死。而司马颖也就乘机进入洛阳,做丞相,控制了政权。
东海王司马越认为自己杀死司马义有功,却没有得到什么好处,很不甘心,就假借惠帝的名义,起兵讨伐司马颖,结果被司马颖打败,只好逃回东海郡。
这时候,跟司马颖有仇的幽州刺史王浚,不甘心让司马颖控制政权,就联合鲜卑族、乌桓族,起兵攻打司马颖。司马颖见王浚的力量大,就派人去匈奴,请匈奴左贤王刘渊来助战。结果,王浚还是打败了司马颖。司马颖挟持着惠帝,到了长安。长安是在河间王司马页的掌握之中,他当初虽然和司马颖联合过,可现在看到司马颖兵败势穷,就乘机排挤司马颖,把惠帝控制在自己手里,独揽朝政大权。
被司马颖打败逃走的东海王司马越,见王浚的势力大,就联合王浚攻打关中。他打败司马页以后,进入长安,把惠帝和司马颖、司马页全都带回到洛阳。不久,司马越杀死了司马颖、司马页,毒死了惠帝,拥立司马炽做皇帝,即晋怀帝。晋怀帝把即位的这一年改号为永嘉元年。至此,八个王在自相残杀的过程中,死了七个,一场混战才告结束。
“八王之乱”的时间长达十六年,战争不断,民不聊生,严重削弱了西晋的统治。这场大乱以后,没有多少年,各地人民和从西部、北部内迁到黄河流域来的少数民族,都纷纷起兵反抗,西晋终于一步步走向灭亡。