定軍山の戦い
事前の経緯
赤壁の戦いの後、劉備は荊州南部の四郡を占領し、ついに地盤を得て大きく飛躍するに至った。
さらに214年に劉備が益州を占領し勢力を伸ばすと、これを聞いた孫権は劉備に対して荊州の割譲を要求した。劉備は涼州を得たら荊州を再分割しようと返答したが、これに怒った孫権は長沙・桂陽・零陵を支配するため役人を送り込んだ。しかし荊州四郡を督していた関羽に追い返された。孫権は自ら軍を指揮して陸口に駐屯し、魯粛を巴丘に駐留させて関羽の動きを封じ、呂蒙に三郡を攻め取らせた。三郡はすぐに降伏したが、まもなく、劉備が自ら指揮を執って公安に来援したため、関羽は三郡を奪回しようと益陽に向かった。
215年、このような劉備と孫権の険悪な情勢の中で、曹操は漢中の張魯への攻撃を開始した。曹操は当初異民族を蹴散らしながら軽快に進撃を続けたが、秦嶺山脈の険しさによって輸送に支障をきたし軍は疲弊し、陽平関において張魯の弟の張衛の前に一度は敗北を喫した。しかし、劉曄の提案に従い、最終的には張衛を打ち破り、張魯は巴中に逃亡し、曹操は漢中を領有するに至った（陽平関の戦い）。この様な情勢下において、劉備と孫権が敵対し続けるのは両勢力にとって極めて不利益であったので、魯粛と関羽が会見し、劉備は荊州の呂蒙に奪われた長沙郡・桂陽郡の領有を認めることで孫権と和解し、奪われた零陵郡の返還と南郡の領有を認めさせ、両者は軍を引いた。この後、劉備は漢中の攻略を目標とすることになった。
張魯の降伏
孫権との和平が成立すると劉備は益州に帰還した。黄権は「漢中を曹操に占拠されているのは我が勢力の存亡に関わるからこれを奪取すべきであり、まずは巴中の張魯を引き込むべきだ。」という意見をしめした。劉備はこれを容れ、黄権の軍を巴中に派遣したが間に合わず、張魯は曹操に降伏してしまった。曹操は張魯の戦後処理を評価し、張魯を鎮南将軍とした。
司馬懿・劉曄は漢中だけでなく巴蜀をも一気呵成に攻略すべきであると上申したが、曹操は光武帝の言葉（「隴を得て蜀を望む」）を引用し、「既に隴を平らげ、復た蜀を望むことはしない」と語り、夏侯淵・張郃・徐晃らに漢中の守備を任せると自身は撤退した。
巴西の戦い
曹操は張魯を下すと張郃を南下させ、巴西・巴東を降させ、その地方の住民を漢中に強制移住させた。また張既や和洽の進言により、漢中の住民を北に移住させた。
劉備は江州で張郃の軍と対峙する一方で、張飛に張郃への対処を命じた。張飛と張郃は宕渠・蒙頭・盪石において50日以上に渡って対峙を続けた。張飛は精鋭1万人を率いて別の街道を迂回し、張郃の軍に横撃をかけた。張郃の軍は狭い山道の中で前後の軍が連携を取ることが出来なかった。張飛は張郃の軍を壊滅させ、張郃は馬を乗り捨て供まわりの者わずかに10人あまりと間道を縫って漢中の南鄭に退却した。
さらに黄権が曹操から任命された巴東太守朴胡・巴西太守杜濩・巴郡太守袁約を撃破した為、劉備は完全に巴西・巴東を制圧した。後に劉備は黄権が立てた計略に則って、漢中を攻略することになる。
武都の戦い
法正は、夏侯淵・張郃に漢中を守りきる能力は無いことを理由として、劉備に漢中を攻めるよう提案した。
218年、劉備は漢中を攻め、別働隊として呉蘭・雷銅・張飛・馬超の部隊二万を派遣して武都を攻略させた。
呉蘭・張飛らに対し、曹操は曹洪・曹真・曹休らを派遣して対応させた。このとき曹操は若い世代の武将に多大な期待を寄せ、曹休に対し「お前は参軍だが、実質的な総指揮を執るのだぞ」と語り、総指揮官の曹洪に対してもそのようにするようにと命じた。
曹洪の軍が接近すると、劉備は張飛を固山に派遣し、曹洪らの糧道を遮断する形勢を示した。曹休は「糧道遮断を本気でやるつもりならば軍を隠密行動させる必要があるにもかかわらず張飛は隠密行動をとっていません。張飛は牽制にすぎないだろうから無視して、呉蘭を迅速に全兵力で攻撃すべきです」と発言し、曹洪もこの考えを採用し、呉蘭を攻撃した。曹洪の総攻撃を受けた呉蘭の軍は大敗し、張飛・馬超は逃亡した。呉蘭・雷銅は、曹洪に同盟した氐族の酋長の強端の伏兵にあい斬り殺された。
一方、劉備は陽平関を襲撃し、陽平関を占拠した。
更に劉備は陳式ら十余の軍営をもって馬鳴閣の街道を遮断した。徐晃は別働隊を率いて、陳式らの部隊を破った。陳式らの軍勢には谷間に落ちて死ぬ者も多かった。
定軍山の戦い
219年、劉備軍の本隊五万は定軍山（現在の陝西省漢中市勉県）に侵出し、夏侯淵は劉備を迎撃した。劉備はまず張郃軍一万人に対し、兵を十部隊に分けて夜襲をかけた。
張郃はこの攻撃は耐え抜いた。劉備は走馬谷（そうばこく）の陣を焼き払い、これを機として東の陣を守る張郃を攻撃、張郃軍は劣勢となった。夏侯淵は指揮下の軍の半分を派遣し張郃を救援した。法正はこの期を逃さず劉備に夏侯淵を攻撃するように進言したので、劉備は半減した夏侯淵の本隊を攻撃する事にした。黄忠が先陣に立候補し、劉備は法正と黄忠を組ませた。
次に黄忠軍は夏侯淵の本陣から南方十五里離れた所の逆茂木を焼き払った。夏侯淵はこの逆茂木の修復に四百の兵を率いて自ら出向いた。黄忠ら騎馬軍数千人は夏侯淵の本陣の後ろの高所を強引に登り、高所から軍鼓を鳴らし喊声を上げながら奇襲をかけた。夏侯淵は兵を迂回させこれを迎え撃つよう命令したが、夏侯淵の本陣は高所に囲まれ迂回、つまり散開が出来ず黄忠軍から逃げられなくなっていた。抵抗を試みるも魏軍は壊滅し、夏侯淵・趙顒らは斬り殺された。
夏侯淵は以前から曹操より「指揮官には勇気ばかりではなく、時には臆病さも必要で、行動するときは常に知略を用いよ」と戒められていた。夏侯淵は即断即決の傾向があり、この闘いで曹操に指摘された欠点が露呈し敗死する結果となってしまった。
夏侯淵の息子の夏侯栄は夏侯淵が戦死したと周囲の者達から伝えられ撤退を促されたが、「父や兄が戦って死んでいるというのに何故俺だけが逃げる事が出来ようか」と言うと劉備軍に突撃して戦死した。
大将を失った漢中守備軍は浮き足立ったが、夏侯淵の幕僚であった郭淮・杜襲は劉備にも警戒されている名将である張郃こそが大将を引き継ぐに相応しいと考え、全軍に命令を発して張郃を大将に推薦したため、張郃が漢中守備軍を引き継いだ。すると兵士達の動揺はピタリと収まったという。劉備は張郃を討ち取れなかったと聞くと「一番の大物（張郃）を手に入れなければならぬな」と語った。
この戦いでの曹軍の重鎮である夏侯淵の戦死は余程の大事件であったようで、後の様々な文献で折に触れ扱われる他、史書での記述が大変細く、黄忠は征西将軍、後将軍と昇進し、関羽、張飛、趙雲、馬超と並ぶ軍の重鎮となっている。
魏王曹操親征
事ここに至って、前年より長安に滞在して諸軍を督戦していた魏王の曹操は、自ら大軍の指揮を執り漢中奪回を図った。劉備は地形を利用して高所に要害を組み、曹操を迎え撃った。劉備は「曹操が来たとしても何もできないであろう、私は必ず漢川を保有してみせよう。」と語り自信を示した。
『三国志』武帝紀・張郃伝・先主伝によれば、劉備は高山に布陣して曹操と戦おうとしなかったという。
一方で『趙雲別伝』によれば、黄忠が曹操軍の兵糧庫を襲撃した。ある時、趙雲は黄忠の軍が帰還予定時刻になったにも関わらず帰還しないので数十騎を率いて偵察に出た。趙雲はたまたま曹操軍と行き違った。曹操軍は趙雲を攻撃したが、逆に趙雲は曹操軍の陣に突撃をかけこれを敗走させると戦いながら自陣に撤退した。曹操軍は態勢を立て直し趙雲の陣に迫った。趙雲はこれに空城の計をもって対応し、曹操軍は伏兵の存在を考え撤退した。そこに趙雲が銅鑼を鳴らし矢を射掛けると敵軍は動揺し多くが漢水に落ちて溺れ死んだ。これを聞いた劉備は「趙雲は全身が胆である」と語ったという。
曹操の側でも曹真・徐晃が陽平にいた高翔を撃破するなどしたが決定打には欠き、数ヶ月に渡って攻撃を続けたが要害に篭る劉備を破ることはできず、日ごとに死者を増やした。曹操が軍議の際に放った「鶏肋」という言葉を楊修は勝手に「魏王様は撤退を考えていらっしゃるのではないか」と判断し撤退の準備を開始した。曹操も結局そのまま撤退し、こうして劉備は漢中を支配したのである。
戦後
劉備は群臣に推挙されるという形で漢中王に即位し、劉邦の故事に従い中原を制覇するという意向を明かにした。また漢中郡の太守には魏延を抜擢した。
関羽は戦捷をかって荊州北部攻撃を開始する。これに対する曹操軍は大規模な敗退の直後であり、編成が整わず、于禁が捕縛され、龐徳が討ち取られるなど大いに苦戦することとなる（樊城の戦い）。
曹操軍に追い詰められることが多かった、劉備軍が大勝した戦として、時勢の転機を迎えた戦としても知られる。
三国志演義
『三国志演義』では、曹操の軍勢が40万に対して、劉備の軍勢は10万として、記されている。