readline is amazing, for bringing consistent shell-like behavior in a variety of programs, including the shell, python, mysql, etc.
You configure it using ~/.inputrc...here are the commands I use:
set completion-ignore-case on
Tab-completion will ignore case if it's not ambiguous...
set show-all-if-ambiguous on
...but if it is ambiguous, this will give you a list if you hit tab again.
Space: magic-space
Magic space is key. When you press space, it will expand out any ! commands you have on the line. If you have none, it's just a normal space. This lets you be much more bold with your use of history commands, as you can see what it expands out to before you run it. Note that this can interfere a little within other environments, such as python.
"\e[A": history-search-backward
"\e[B": history-search-forward
These two set incremental history search. You can type part of the command you know is in your history, and then pressing up or down will cycle through them. E.g., if you're looking for that particular find command you did a few days ago, you can type 'find' and then hit up arrow until you find it.
set editing-mode vi
Finally, not for everyone, but for us vi users, this is awesome. You get a lot of the standard vi functionality on the command line (and anywhere else you use readline, include mysql and python). This means esc + j/k to scroll up or down through history (far faster than arrow keys), using f/F/t/T commands, d/c/a/i ways to enter edit mode, even . and , work as expected, etc.