[b]1. binary[/b]
BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写。举例:
mysql> select * from tjob;
+-------+
| title |
+-------+
| 11 |
| 22 |
| 33 |
| aa |
| bb |
| cc |
| AA |
| BB |
| CC |
+-------+
9 rows in set (0.00 sec)
mysql> select title from tjob where title like 'a%';
+-------+
| title |
+-------+
| aa |
| AA |
+-------+
2 rows in set (0.00 sec)
mysql> select title from tjob where binary title like 'a%';
+-------+
| title |
+-------+
| aa |
+-------+
1 row in set (0.00 sec)
mysql> select title from tjob where binary title like 'A%';
+-------+
| title |
+-------+
| AA |
+-------+
1 row in set (0.00 sec)
[b]2.group by with rollup[/b]
在group by结果的最后一行,列出所有行的总和,如下,多了最后一行
mysql> select count(*),title from tjob group by title with rollup;
+----------+-------+
| count(*) | title |
+----------+-------+
| 1 | 11 |
| 1 | 22 |
| 1 | 33 |
| 2 | aa |
| 2 | bb |
| 2 | cc |
| 9 | NULL |
+----------+-------+
7 rows in set (0.00 sec)
[b]3.group_concat[/b]
group_concat合并行,例如把title字段的值打印在一行,逗号分隔。
mysql> select group_concat(title separator ',') from tjob;
+-----------------------------------+
| group_concat(title separator ',') |
+-----------------------------------+
| 11,22,33,aa,bb,cc,AA,BB,CC |
+-----------------------------------+
1 row in set (0.00 sec)
[b]4.order by if[/b]
排序时将某列中特定值排在最前,例如我在排序中要把aa放在最前面:
select title from tjob order by if(title='aa',0,1),title;
+-------+
| title |
+-------+
| aa |
| AA |
| 11 |
| 22 |
| 33 |
| bb |
| BB |
| cc |
| CC |
+-------+
[b]5.prompt[/b]
如果有很多mysql数据库管理,有时会发生自己忘记了在那台服务器,那台数据库上,毋庸多说,谁都知道这有多危险。可以使用prompt来重写mysql客户端提示符。
mysql>prompt \u@\h(\d) \r:\m:\s>
\u:连接用户
\h:连接主机
\d:连接数据库
\r:\m:\s:显示当前时间
如果嫌每次都在命令行修改麻烦,直接修改my.cnf参数
[mysql] #这是不是[mysqld]
prompt=\\u@\\d \\R:\\m>
[b]6.pager[/b]
如果select出来的结果集超过几个屏幕,那么前面的结果一晃而过无法看到。使用pager可以设置调用os的more或者less等显示查询结果,和在os中使用more或者less查看大文件的效果一样。
mysql> pager more
PAGER set to 'more'
mysql> \P more
PAGER set to 'more'
mysql> pager less
PAGER set to 'less'
mysql> \P less
PAGER set to 'less'
mysql> nopager
PAGER set to stdout
[b]7.delimiter[/b]
delimiter就是告诉MySQL解释器,命令的结束符是什么。
默认情况下MySQL命令结束是以分号(;),在写过程或者函数等情况下,这会产生不少问题,因为存储过程中有许多语句,所以每一个都需要一个分号。因此你需要选择一个不太可能出现在你的语句或程序中的字符串作为分隔符。
mysql> delimiter $
mysql> select count(*) from tjob$
+----------+
| count(*) |
+----------+
| 9 |
+----------+
1 row in set (0.00 sec)
想改回到分号,只需
mysql> delimiter ;
[b]8.load data local infile[/b]
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS //字段
[TERMINATED BY 'string'] //字段分割符
[[OPTIONALLY] ENCLOSED BY 'char']//字段的包含符,默认是''(空)
[ESCAPED BY 'char' ] //转义符,如'\\'
]
[LINES
[STARTING BY 'string'] //行的开始字符串,从string后面开始
[TERMINATED BY 'string'] //行分隔符,默认是'\n'(空行)
]
[IGNORE number LINES] //跳过前面number行
[(col_name_or_user_var,...)] //字段名称
[SET col_name = expr,...)]
使用load data导入数据,看起来是很简单,但是却经常容易出错。比如,需要导入的文本有时候并不是以’\n’(空行)结尾,不细心的话很容易出错。有时候导入的数据有列的信息,则可以使用IGNORE number LINES跳过前面指定行数等。
[b]9.unix_timestamp and from_unixtime[/b]
unix_timestamp将时间转化成时间戳格式。
from_unixtime将时间戳转化成时间格式。
mysql> select unix_timestamp(now());
+-----------------------+
| unix_timestamp(now()) |
+-----------------------+
| 1251884321 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select from_unixtime(1251884321);
+---------------------------+
| from_unixtime(1251884321) |
+---------------------------+
| 2009-09-02 17:38:41 |
+---------------------------+
1 row in set (0.00 sec)
很多时候mysql的应用都是使用时间戳格式来存储时间,这两个函数应用的场合很多,需要牢记。
BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写。举例:
mysql> select * from tjob;
+-------+
| title |
+-------+
| 11 |
| 22 |
| 33 |
| aa |
| bb |
| cc |
| AA |
| BB |
| CC |
+-------+
9 rows in set (0.00 sec)
mysql> select title from tjob where title like 'a%';
+-------+
| title |
+-------+
| aa |
| AA |
+-------+
2 rows in set (0.00 sec)
mysql> select title from tjob where binary title like 'a%';
+-------+
| title |
+-------+
| aa |
+-------+
1 row in set (0.00 sec)
mysql> select title from tjob where binary title like 'A%';
+-------+
| title |
+-------+
| AA |
+-------+
1 row in set (0.00 sec)
[b]2.group by with rollup[/b]
在group by结果的最后一行,列出所有行的总和,如下,多了最后一行
mysql> select count(*),title from tjob group by title with rollup;
+----------+-------+
| count(*) | title |
+----------+-------+
| 1 | 11 |
| 1 | 22 |
| 1 | 33 |
| 2 | aa |
| 2 | bb |
| 2 | cc |
| 9 | NULL |
+----------+-------+
7 rows in set (0.00 sec)
[b]3.group_concat[/b]
group_concat合并行,例如把title字段的值打印在一行,逗号分隔。
mysql> select group_concat(title separator ',') from tjob;
+-----------------------------------+
| group_concat(title separator ',') |
+-----------------------------------+
| 11,22,33,aa,bb,cc,AA,BB,CC |
+-----------------------------------+
1 row in set (0.00 sec)
[b]4.order by if[/b]
排序时将某列中特定值排在最前,例如我在排序中要把aa放在最前面:
select title from tjob order by if(title='aa',0,1),title;
+-------+
| title |
+-------+
| aa |
| AA |
| 11 |
| 22 |
| 33 |
| bb |
| BB |
| cc |
| CC |
+-------+
[b]5.prompt[/b]
如果有很多mysql数据库管理,有时会发生自己忘记了在那台服务器,那台数据库上,毋庸多说,谁都知道这有多危险。可以使用prompt来重写mysql客户端提示符。
mysql>prompt \u@\h(\d) \r:\m:\s>
\u:连接用户
\h:连接主机
\d:连接数据库
\r:\m:\s:显示当前时间
如果嫌每次都在命令行修改麻烦,直接修改my.cnf参数
[mysql] #这是不是[mysqld]
prompt=\\u@\\d \\R:\\m>
[b]6.pager[/b]
如果select出来的结果集超过几个屏幕,那么前面的结果一晃而过无法看到。使用pager可以设置调用os的more或者less等显示查询结果,和在os中使用more或者less查看大文件的效果一样。
mysql> pager more
PAGER set to 'more'
mysql> \P more
PAGER set to 'more'
mysql> pager less
PAGER set to 'less'
mysql> \P less
PAGER set to 'less'
mysql> nopager
PAGER set to stdout
[b]7.delimiter[/b]
delimiter就是告诉MySQL解释器,命令的结束符是什么。
默认情况下MySQL命令结束是以分号(;),在写过程或者函数等情况下,这会产生不少问题,因为存储过程中有许多语句,所以每一个都需要一个分号。因此你需要选择一个不太可能出现在你的语句或程序中的字符串作为分隔符。
mysql> delimiter $
mysql> select count(*) from tjob$
+----------+
| count(*) |
+----------+
| 9 |
+----------+
1 row in set (0.00 sec)
想改回到分号,只需
mysql> delimiter ;
[b]8.load data local infile[/b]
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS //字段
[TERMINATED BY 'string'] //字段分割符
[[OPTIONALLY] ENCLOSED BY 'char']//字段的包含符,默认是''(空)
[ESCAPED BY 'char' ] //转义符,如'\\'
]
[LINES
[STARTING BY 'string'] //行的开始字符串,从string后面开始
[TERMINATED BY 'string'] //行分隔符,默认是'\n'(空行)
]
[IGNORE number LINES] //跳过前面number行
[(col_name_or_user_var,...)] //字段名称
[SET col_name = expr,...)]
使用load data导入数据,看起来是很简单,但是却经常容易出错。比如,需要导入的文本有时候并不是以’\n’(空行)结尾,不细心的话很容易出错。有时候导入的数据有列的信息,则可以使用IGNORE number LINES跳过前面指定行数等。
[b]9.unix_timestamp and from_unixtime[/b]
unix_timestamp将时间转化成时间戳格式。
from_unixtime将时间戳转化成时间格式。
mysql> select unix_timestamp(now());
+-----------------------+
| unix_timestamp(now()) |
+-----------------------+
| 1251884321 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select from_unixtime(1251884321);
+---------------------------+
| from_unixtime(1251884321) |
+---------------------------+
| 2009-09-02 17:38:41 |
+---------------------------+
1 row in set (0.00 sec)
很多时候mysql的应用都是使用时间戳格式来存储时间,这两个函数应用的场合很多,需要牢记。