Victory put South Africa 1-0 up in the four-match series following the drawn first Test at Lord's and was fully deserved after they'd outplayed England.
The Proteas bowled their hosts out for 203 and then piled up 522, a total built around a South African fifth-wicket record stand against England of 212 between AB de Villiers, who made a composed 174, and Ashwell Prince, whose Test-best 149 was his second century of the series.
South Africa had batted two days to save the first Test but England, 319 runs behind on the first innings, never looked like matching that achievement.
Instead they were dismissed for 327 after tea on the fourth day, with fast bowlers Morne Morkel and Dale Steyn taking three wickets apiece.
A last wicket stand of 61 between No 9 Stuart Broad, whose unbeaten 67 was his second fifty in as many Tests, and controversial, Australia-raised debutant Darren Pattinson prevented an innings defeat but merely delayed the inevitable.
South Africa reached their victory target of nine runs in seven balls with captain Graeme Smith three not out and Neil McKenzie six not out.
At tea, England were 182 for six. Tim Ambrose was 16 not out and all-rounder Andrew Flintoff, in his first Test after 18 months out injured, nine not out.
South Africa took the new ball as soon as it was available after 80 overs.
Flintoff responded by pulling and driving fast bowler Makhaya Ntini for two well-struck fours.
But the new ball did provide South Africa with a breakthrough when, after a stand of 68, Ambrose tried to cut a Steyn ball which was too close to him and gave oppposing gloveman Mark Boucher his ninth catch of the match.
Flintoff continued to attack and drove Steyn down the ground. But an innings of more than two hours duration ended when Flintoff, on 38, edged a drive off fast bowler Morne Morkel to rival all-rounder Jacques Kallis at second slip and England were 238 for eight.
Any hopes England had, on the 27th anniversary of their astounding Ashes Test victory over Australia at Headingley, where they won after following-on, of producing a stunning fightback had long since evaporated.
England, who'd already lost star batsman Kevin Pietersen cheaply, had added just 10 runs to their lunch total of 130 for four when Ian Bell was out.
He cut hard at Morkel only for de Villiers to hold a stunning, one-handed, diving catch in the gully.
It was a sweet moment for de Villiers, booed by some fans after 'catching' Andrew Strauss on Friday when in fact he'd dropped the ball, and he pointedly gestured toward his critics in the Western Stand.
Opener Alastair Cook had fought hard for his 60, batting for nearly five hours when, trying to turn paceman Kallis legside, he got a leading edge and was caught by Hashim Amla in an unusual position at short cover.
England were just 12 minutes away from getting through the morning session without losing a wicket when nightwatchman James Anderson's gutsy 111 minute vigil for a Test-best 34 ended when he was lbw to Steyn.
South Africa-born Pietersen then struck three boundaries in his first four balls on his way to 13.
But his fifth, from Kallis, got big on him and took the shoulder of the bat with a gleeful Boucher doing the rest.
England resumed on Monday on 50 for two after Ntini had removed opener Strauss and captain Michael Vaughan with two superb deliveries late on Sunday.
Cook was 23 not out and Anderson unbeaten on nought.
The third-wicket pair got through the first hour although Anderson was subsequently far from unscathed when hit on the wrist and the side of the head, as he turned away, by successive Steyn deliveries.
The third Test starts at Edgbaston on July 30.