5 MySQL tricks you may not know
Posted September 16, 2009on:
1. Produce terminal-friendly output
Occasionally you may be using the command line and find yourself limited by the size of either the table you’re getting results from or by the size of the terminal window you’re using. (I find the DPS window particularly resistant to resizing.
You can get results in this format
instead of the default tabular layout by using the
\G flag at the end of your select statement:
select * from my_table where id = "3"\G
2. Better, more flexible result ordering
Recently I found myself a bit hamstrung by the way a table had been designed. I wanted chronological ordering, but the default ordering by date wasn’t ordering the results exactly chronologically.
I found that I could use functions in the ‘order by’ component of my selects to get better ordering
select * from my_table order by concat(entry_date, entry_time);
group by could also be used to similar effect)
3. Logging your command line session
Occasionally you may end a command line MySQL session and then think “Argh – I wish I’d saved that query!”. MySQL has a handy logging feature which writes your session (input and output) to a file so you can pull out those tricky queries and keep them for future reference. To do so, log in using the
mysql -u username -p -tee=/path/to/your/log.file
Obviously you need write access to the folder you’re writing to. If the file doesn’t exist, MySQL will create it for you.
Beware: if the file already exists, MySQL will overwrite it with the new session data.
4. Loading .CSV file data into a table using the command line
MySQL has a very simple way to load .csv file data into tables. Once you have the syntax down, I find this a lot easier and ess error-prne than commonly used web-based or GUI tools.
Syntax I’ve used is:
load data infile '/path/to/your.csv' into table my_tables fields terminated by ',' optionally enclosed by '"' lines terminated by '\n';
Works a treat.
5. Cloning tables
This is really simple, but is something I use a lot to create development tables with live data (when necessary).
create table my_new_table as select * from my_old_table;
This does exactly what it looks like – creates an exact renamed copy of the original table (my_old_table in this instance).
Beware: keys and indexes aren’t recreated – you’ll need to add these back in manually.
What about you – any handy MySQL tricks to share?