With this thumping win, India took a 2-0 lead in the five-match series against the visiting side.
Kohli completed another impressive century, his seventh in one-dayers, to lead the Indian run chase as they achieved the modest 238-run target in just 36.4 overs.
Kohli hit 16 boundaries in his 98-ball brilliant knock as he raced to his seventh ton in just 89 balls.
Gambhir played a perfect partner for flamboyant Kohli, as the left-hander himself played a gem of an innings off 90 balls and smashed ten boundaries.
India got off to a bad start as they lost openers Ajinkya Rahane (14) and Parthiv Patel (12) early.
Tim Bresnan struck twice in his successive overs to provide England early breakthroughs after visiting bowlers checked India's run chase from the beginning.
Rahane was caught near the boundary rope while trying to hit two consecutive sixes in the seventh over. The right-hander hit a six and a four in his 15-ball cameo.
Earlier, pacer Vinay Kumar took 4 wickets for 30 runs to help India bundle out England for 237 on Monday.
Vinay led an impressive young Indian attack as they knocked off England top-orders cheaply to reduce the visitors to 121/5 in 25.2 overs. Umesh Yadav supported Vinay and Praveen Kumar well as a third paceman and took two English wickets for 50 runs.
Praveen started Indian attack by removing England skipper Alastair Cook for nought in the very first over. Vinay soon joined the party as he dismissed Craig Kieswetter (0), Jonathan Trott (34) inside the mandatory powerplay.
England failed to accelerate in the end as they lost their last five wickets for just 30 runs and were eventually bowled out in 48.2 overs.
Jonathan Bairstow (35) and Samit Patel (42) tried to revive England innings with a steady 86-run stand for the sixth wicket before both fall in quick succession.
Virat Kohli took a well timed catch at the boundary to dismiss Bairstow off Ravindra Jadeja in the 43rd over soon after Patel became Yadav's second victim in the previous over.
Bairstow played a patient innings of 35 off 49 balls with the help three boundaries whereas Patel smacked two sixes and two fours in his 53-ball knock.
Ravichandran Ashwin and Yadav struck in the consecutive overs to give England double blow as they dismissed Ravi Bopara (36) and Kevin Pietersen (46) respectively.
Yadav increased England worries when Pietersen went for the drive but the ball took a faint outside edge off the bottom of the bat and Dhoni grabbed it behind the wickets soon after Ashwin broke a crucial 73-run fourth wicket partnership between them.
After losing two early wickets, Jonathan Trott and Kevin Pietersen tried to steady England innings as they added 48 runs third wicket stand. Trot lost his cool and got faint edge which went into the gloves of skipper MS Dhoni.
England started their innings on a bad note as they lost skipper Alastair Cook and Craig Kieswetter in the first two overs.
Praveen Kumar struck on the fourth delivery of the first over to remove Cook who attempted to hit over point but failed to get the elevation as Ravindra Jadeja made no mistake to pouch it.
Vinay Kumar joined his partner to give England another shock as he dismissed Craig Kieswetter to thump visitors to 0/2.
Earlier, England skipper Alastair Cook won the toss and decided to bat against India. Both India and England have retained the same side which played the first ODI in Hyderabad.
Buoyed by the resounding 126-run triumph in the opening game, India will seek to maintain their supremacy against England in the second ODI with the focus on grooming the young brigade.
Teams:
India: Mahendra Singh Dhoni (captain and wicketkeeper), Gautam Gambhir, Parthiv Patel, Ajinkya Rahane, Virat Kohli, Suresh Raina, Ravindra Jadeja, R Ashwin, Umesh Yadav, Vinay Kumar, Praveen Kumar.
England: Alastair Cook (captain), Craig Kieswetter (wicketkeeper), Jonathan Trott, Kevin Pietersen, Ravi Bopara, Jonathan Bairstow, Graeme Swann, Samit Patel, Tim Bresnan, Steven Finn, Jade Dernbach.