They have all in common, that they define a new command, but the precondition and behavior differs a bit:
\renewcommand works only if the command is already defined: it's a redefinition
\newcommand doesn't work if the command is already defined: so it's a completely new definition
\providecommand works like \newcommand, but if the command is already defined, the (re)definition is ignored
\renewcommand and \newcommand would throw an error, if the condition is not fulfilled, to ensure clean programming, so you don't accidentally overwrite existing commands or try to redefine one which doesn't exist.
\providecommand may be helpful, if the same code would be used in several documents. If you would use it, you should be aware that it might have no effect. But using it you can avoid compile time errors.
For all commands exists a starred version. To see the difference, have a look at:
If you really don't want error checking, you could use \def, see:
\providecommandor how to do this unconditional definition in LaTeX-style code. Thanks! – Ryan Reich Nov 25 '11 at 21:11\def, but this sacrifices the ease of use of the LaTeX macros. The easiest way to emulate this is to\let\foo\outer\renewcommand\foo{stuff}. (I chose\outerbecause it's pretty likely to produce errors if used incorrectly). The best solution would of course be to make a\defcommandthat always overwrote its argument regardless, but it would have to have a starred version like\newcommandand friends which complicates matters a bit... – kahen Apr 24 '12 at 17:01\makeatletter\def\defcommand{\@ifstar\defcommand@S\defcommand@N} \def\defcommand@S#1{\let#1\outer\renewcommand*#1} \def\defcommand@N#1{\let#1\outer\renewcommand#1} \makeatother. (God I hate that we can't have linebreaks in comments...) – kahen Apr 24 '12 at 17:07