mysql命令行客户端登录
#默认端口3306 主机本地localhost
mysql -u root -p
#写全的话
mysql -u root -p -h localhost -P 3307
解释一下:-u 用户名为root -p 密码待输入 -h 主机名localhost -P 注意大写P ,意思是端口号3307
数据库操作
#展示所有数据库
show databases;
#使用数据库
use kls;
#展示数据库中所有的表
show tables;
#展示person表的字段
show columns from person;
#show columns from 可以用describe代替
describe person;
mysql不区分大小写,但是为了易于阅读,开发人员经常把关键字大写,列和表名小写。(反正我是遵守不了,看大写的英文难受)
检索不同的行
如果查询学生表的年龄,每个年龄只出现一次
select distinct age from student;
限制返回结果数
limit 5 表示从第1行开始,返回5条记录
select name from student limit 5;
limit 5, 5表示从第5行开始,返回5条数据
select name from student limit 5,5;
另一种写法:limit 2 offset 3 代表从行3(也就是第四行)开始取2行
select name from student limit 2 offset 3;
排序order by
注意:order by 不仅可以按照检索的列排序,用非检索的列排序也是合法的。
注意:在多个列进行降序排序,需要在每个列指定DESC关键字,因为不指定的都默认ASC升序排列。
注意:order by 和 limit连用的时候,limit放在order by的后面。
between操作符
用来检索在两个数值之间的记录,例如查询在18-20岁之间的学生
select * from student t where t.age between 18 and 20;
通配符 % 和 _
mysql使用LIKE操作符跟%通配符进行模糊搜索。
#查询姓李的学生
select name from student where name like '李%';
①注意:根据mysql的配置方式,搜索是要区分大小写的,例如模糊搜索中'jet%'是不会匹配JetPack的。
②注意'%jet%'表示匹配任何位置包括jet文本的值,而不论他之前或之后出现什么值。
③%表示搜索模式指定位置有0到多个任意字符。
④注意通配符_下划线,只能匹配1个字符,不能多也不能少。
⑤%不会匹配NULL行,即使是like '%'也不会匹配NULL行。
⑥通配符一般处理时间比其他搜索要长,其他操作能达到尽量不要使用,使用通配符时候除非有绝对必要,否则不要把通配符用在开始处,因为放在开始处,搜索会最慢。
使用mysql正则表达式
mysql使用
regexp
表示后面跟的内容为正则表达式
基本字符匹配
#正则匹配姓名为小刚的行
select * from student where name regexp '小刚';
. 点号是正则表达式中的一个重要字符,表示匹配任意一个字符。
#正则匹配0前面有任意一个字符的行,例如10、20等
select * from student where age regexp '.0';
正则表达式不区分大小写,为了区分大小写可以使用binary关键字
#下面例子则匹配jet 1000 或者 jet a000等
... where name regexp binary 'jet .000';
进行OR匹配
正则表达式利用
|
来表示or操作
#匹配名字中包括小明或小李的
... where name regexp '小明|小李';
匹配几个字符之一
使用
[]
包裹的字符,表示匹配其中之一
#正则匹配包括1或2或3的学号
... where id regexp '[123]';
解释:
[123]
是[1|2|3]
的缩写,其实[]
就是正则中另一种形式的or语句,为什么加[]
是因为如下:
字符集合也可以被否定,即匹配除指定字符之外的任何东西,即
[^123]
匹配除123这三个字符之外的任何东西。
正则匹配范围
#例如
[0-9]
[a-z]
[1-3]
[a-e]
#将会匹配到1 Ton anvil 或 .5 ton anvil等
... where name regexp '[1-5] Ton';
正则匹配特殊字符\\
转义
如果需要转义
\
本身,需要使用\\\
为什么正则表达式用两个\\
呢?因为在mysql当中,mysql自己解释一个,正则表达式库解释一个。
正则匹配字符类
正则匹配多个实例
正则定位符
例如我们想搜索一个以
.
点号或者数字开头的结果,怎么办?
[0-9\.]是不行的,因为他会在文本的任意位置开始查找,解决办法就是使用定位符^从文本开始位置查找。
... where name regexp '^[0-9\\.]';
创建计算字段
简单来说,数据库中存储的结果不是我们最终想要的,例如省市区分别存储在3列中,我们需要连在一列显示。
拼接字段Concat()函数
#将first_name、 ( 、last_name、和)这四个字符串拼接起来,例如: 李 (小明)
select Concat(first_name, ' (' , last_name, ')') as name from student;
Trim()
、LTrim()
、RTrim()
函数
分别为去掉左右两边的空格、去掉左边空格、去掉右边空格
如何测试计算?
#例如查询当前时间
select now();