首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql命令行的一些小技能

2012-12-31 
mysql命令行的一些小技巧????? 虽然现在经常使用图形化工具连接MySQL进行管理,但是总会有一天我们需要使用

mysql命令行的一些小技巧

????? 虽然现在经常使用图形化工具连接MySQL进行管理,但是总会有一天我们需要使用MySQL命令行。因此知道一些小技巧对工作还是很有帮助的。

?

注意:下边这些命令只在Unix/Linux下有效。

?

使用pager

????? 很多图形化工具会自动对结果进行分页,十分方便。但是在MySQL命令行下却不是这样:它直接输出全部结果。这样十分麻烦,不过有个简单的方法,使用 pager 命令可以解决这个问题:

?

mysql> pager morePAGER set to 'more'mysql> select title from sakila.film;+-----------------------------+| title                       |+-----------------------------+| ACADEMY DINOSAUR            || ACE GOLDFINGER              || ADAPTATION HOLES            || AFFAIR PREJUDICE            || AFRICAN EGG                 || AGENT TRUMAN                || AIRPLANE SIERRA             || AIRPORT POLLOCK             || ALABAMA DEVIL               || ALADDIN CALENDAR            || ALAMO VIDEOTAPE             || ALASKA PHANTOM              || ALI FOREVER                 || ALICE FANTASIA              || ALIEN CENTER                || ALLEY EVOLUTION             || ALONE TRIP                  || ALTER VICTORY               || AMADEUS HOLY                |--Plus--

????? 另外一个关于 pager 的实例,如果你想估计一下InnoDB redo log的大小,需要抓取一段时间内Log Sequence Number的数据。不过SHOW ENGINE INNODB STATUS一行输出的结果太多了,不想每次都需要翻到想要看的位置,可以借助 pager 命令解决这个问题:

mysql> pager grep sequencePAGER set to 'grep sequence'mysql> show engine innodb status\Gselect sleep(60);show engine innodb status\GLog sequence number 3801668079921 row in set (0.41 sec)1 row in set (1 min 0.00 sec)Log sequence number 3801702749791 row in set (0.00 sec)

?????? 当你想要禁用这个分页的功能时,简单的执行:

mysql> pagerDefault pager wasn't set, using stdout.

?

使用edit

????? 当要优化一个查询的时候,经常需要修改查询的内容,有的时候使用一个文件编辑器要比直接在命令行下修改方便的多,这个时候,我们可以使用 edit 这个命令。

????? 我们先看一下下边这个查询:

mysql> select count(*) from film left join film_category using(film_id) left join category using(category_id) where name='Music';

????? 现在我们想把 left join 的语句修改为 inner join,并把SQL语句变成大写的。用手工修改的方法十分麻烦,这时个以简单的执行 edit:

?

mysql> edit

????? 然后就会打开默认的文本编辑器,里边是上一次执行的查询语句。默认的文本编辑器是vi,现在就可以使用vi的功能而不仅限于MySQL命令行了。

当你编辑完成后,保存并退出编辑器:此时返回到MySQL命令行下,这时可以键入 ; 或者 \G 来执行这个查询

?

使用tee

????? 在一些情况下,如果你想测试一些命令来写一份文档,或者正处于一次紧急情况中,希望可以记录下所执行的查询。MySQL命令行提供了 tee 这个命令,可以把输入和输出记录到一个文件中,十分像Unix中的tee命令:

?

mysql> tee queries.logLogging to file 'queries.log'mysql> use sakilaReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select count(*) from sakila;ERROR 1146 (42S02): Table 'sakila.sakila' doesn't existmysql> select count(*) from film;+----------+| count(*) |+----------+|     1000 |+----------+1 row in set (0.00 sec)mysql> exit

????? 现在你可以查看一下 queries.log 这个文件,可以得到一份当前session内空的复制。

?

结论

????? MySQL命令行并不像很多图形化管理工具那么好用,但时如果你知道一些隐藏的功能,它会变得更加强大。如果你很喜欢这些小技巧,我会对这些被忽略又实用的小技巧再写另一篇。

?

原文地址: http://www.mysqlperformanceblog.com/2012/12/21/be-productive-with-the-mysql-command-line/

?

?

?

?

热点排行