本文出自博主的《如何系统复习MySQL》,堪称全网最全记录,旨在编写关于关系型数据库MySQL的使用技巧,随时记录方便以后翻阅
MySQL的使用
一、MySQL的安装与配置
学习MySQL需要本机已经完成mysql的安装和配置,本文章以介绍MySQL如何使用为主,关于MySQL的安装与配置本文不再赘述。
接下来让我们开始MySQL的学习之旅吧!!
二、数据库的使用
2.1连接数据库
-
打开cmd,使用管理员访问,进入mysql安装的bin目录下
cd C:\Program Files\MySQL\bin
-
输入连接mysql的认证:用户名和密码
mysql -uroot -p
-
连接成功自动进入mysql中
出现如下字样表示已成功进入mysql数据库中
2.2使用数据库命令
-
查看本地有哪些数据库
SHOW DATABASES;
database就是我们的数据库标题(固定的),包括六个数据库(当然自己的数据库列表可能与这里不一样;因为emos和robot数据库都是楼主自己创建的数据库,而其他数据库为mysql系统内部的数据库)
-
选择数据库
use robot;
知道数据库名有哪些后,我们需要选择具体操作的数据库,这里我使用robot数据库为例;
出现Database changed表示数据库选择成功
-
查看某个数据库包括那些表格数据
SHOW TABLES; 返回当前选择的数据库内可用表的列表
众所周知,数据库中有很多表用于存放固定数据类型的数据,这里查看robot数据库中包含那些数据表:
在robot数据库中查询到有六个数据表
这里我们利用navicat显示的查看robot中有哪些数据表:
(可以看到navicat中显示的数据表和上面命令行查询的表列表一一对应)
-
查询某个数据库中某个表格中包括那些列
查询具体某个表中包括那些列;比如查看tb_user表中具体包括那些列(columns)
SHOW COLUMNS FROM tb_user;
可以看到上述包含5列,代表着tb_user表中的5个字段field;
字段介绍
其中type表示字段的类型,null表示该字段是否为空,key表示该字段是否为主键,default表示该字段的默认值,extra表示该字段的其他信息
(auto_increment:表示该字段自增,作用:某些表列需要唯一值,比如订单编号,雇员ID。在每个行添加到表时,MySQL可以自动的为每一个行分配下一个可用编号,不用在添加时手动分配唯一值。后边会介绍create语句创建表时定义自增变量)
DESCRIBE tb_user; 查询表中字段列的快捷方法
-
show 其他语句
命令 | 作用 |
---|---|
SHOW CREATE DATABASE dbname; | 查询创建dbname数据库的语句 |
SHOW CREATE TABLE tablename; | 查询创建tablename表的语句 |
1.查询robot数据库创建的语句
2.查询tb_user表格创建的语句
三、检索数据
3.1 SELECT语句
SQL语句都是由简单的英文单词构成,大概最经常用的SQL语句就是SELECT语句了。用途:从一个或多个表中检索信息
3.2检索单个列
SELECT username FROM tb_user;
上述语句意思是从tb_user表中检索一个名为username的列。正常使用过程:查询表中字段,然后查询该字段作为单列;如下
3.3查询多个列
SELECT username,password,… FROM tb_user;
上述语句意思是从tb_user表中检索名为username的列和password的列,如果需要查询其他字段属性,加逗号即可
SELECT * FROM tb_user;
上述语句是查询tb_user表中所有的字段列表,给定一个通配符(*)返回列表中所有列,列的顺序是表在定义时出现的顺序。
(一般情况下,除非确实需要表格中所有的列,否则最好不用通配符,因为查询所有的字段是非常消耗应用程序性能和降低检索速度的)
3.4检索不同的行
使用关键字DISTINCT,检索不同的值
SELECT DISTINCT username FROM tb_user;
上述语句返回tb_user表格中不同的username字段(不会出现重复);
如下,我们从web表中查询country字段返回了8行,但是都是相同的,添加DISTINCT关键字返回不同值
3.5限制结果
限制返回的行数(用途:数据的分页查询)
从web表中查询不多于5条的name数据:
SELECT name FROM web LIMIT 5;
从web表中查询从第5到10条的name数据:
SELECT name FROM web LIMIT 5 ,5;
实操如下:
SELECT name FROM web LIMIT 3,3; 第一个3是查询的起始位置,第二个3是检索的行数
综上:limit一个数,总是从第一行开始,给出的数为返回的行数;limit两个数,可以指定从行号开始检索固定数量的信息。当然检索的数量可以大于实际信息数量(这是允许的)
四、排序检索数据
4.1排序数据
SQL语句查询时返回某个数据库中某个表的列,输出顺序是没有固定的,如果不排序,数据一般会以它在底层表中出现的顺序显示,这可以是数据添加到表中的顺序(但是数据更新删除后,顺序可能会收到MySQL重用回收存储空间的影响);如果不明确控制的话,不能也不应该依赖该排序顺序。
关系型数据库设计理论认为,如果不规定排序顺序,则不应该假定检索出来的数据的顺序有意义!
因此明确顺序可以在SELECT语句中使用ORDER BY字句
SELECT alexa FROM web ORDER BY alexa;
从web表中查询alexa,查询出的数据根据alexa进行排序输出
也可以用非检索的列进行排序
4.2按多个列排序
更多的使用是按照多个列进行排序,这个具体是什么意思呢?
假设我们现在要对商品进行价格排序,当商品价格相同时,我们可以再加入一个名称排序,这样查询出来的数据就会先按照商品价格排序,价格相同会按照商品名称排序,最后输出。
语句如下:
SELECT alexa FROM web ORDER BY alexa,name(,…字段);
从web表中查询alexa 字段,先对alexa 进行排序,对alexa 相同的会进行name排序,以此类推…
值得注意的是,如果alexa 列所有的值是唯一的,后续排序就不会发送
实操如下:
4.3指定排序方向
数据排序默认顺序是升序排序(从A到Z);这不是唯一的排序方式,我们在使用排序时还可以降序排序输出数据,只需要在后边加关键字DESC,如下:
SELECT name,alexa FROM web ORDER BY alexa DESC;
从web表中查询name和alexa字段,对alexa进行降序排序:
我们还可以对多个字段进行降序排序,方式就是给每个列alexa、name后边都加上DESC关键字,查询的数据会先按照alexa降序排序,对alexa相同的再按照name进行降序排序;如果name不加DESC关键字,表示对name进行升序排序
这种组合查询需要确保LIMIT的位置必须在ORDER BY 之后,如果使用字句顺序不对,会报错。与DESC相反的是ASC,ASC关键字是升序排序,不过没多大用处,因为默认就是ASC。排序的应用非常广泛,比如我们在购物时可以根据商品价格升序或降序对商品进行排序。
使用ORDER BY和LIMIT的组合,可以查询出最高或者最低的值,如下演示如何查询出alexa最高的值
五、过滤数据
5.1使用WHERE字句
当我们检索所需数据时需要添加搜索条件,这种搜索条件也称为过滤条件。
SELECT name,url FROM web WHERE name = ‘微博’;
如上,从web表中查询微博的网址和名称
在同时使用ORDER BY和WHERE 语句时主要注意顺序:WHERE 在ORDER BY 语句之前,否则会报错
5.2WHERE字句操作符
之前介绍的是最简单的相等测试,但是SQL允许做的事情不仅仅如此,如下介绍WHERE字句的操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
BETWEEN a AND b | 在指定a和b之间 |
如下,从web数据表中查询name和alexa字段,过滤条件是alexa小于等于3,然后对输出数据进行排序
这里需要注意,当where语句中进行数值比较不需要加单引号,如果语句内是字符类型的话需要加单引号
下边是查询alexa在0-3范围的name和alexa字段:
5.3数据过滤
上述都是单一过滤条件,现实中用到的是更高级的功能更强的搜索条件,组合的where语句
操作符 | 说明 |
---|---|
AND | 连接多个条件同时成立才会成立 |
OR | 多个条件中,一个条件成立即可 |
IN | 指定条件的范围 |
NOT | 否定它之后跟的条件 |
如下,web数据表中包含的数据,当我们需要查询国家是CN或者USA并且alexa小于20的网址名称,网址和alexa时,我们可以利用组合的where语句进行搜索
AND和OR搜索语句:
SELECT name,url,alexa FROM web WHERE (country = ‘CN’ OR country = ‘USA’) AND alexa < 13;
(上述语句用到了括号进行优先级确定,因为在mysql中AND操作符优先级大于OR优先级,不加括号翻译成:检索country为CN或者country为USA同时alexa小于13的数据,如下检查出的数据)可以看到下面查询的数据跟上面不同,alexa>13的部分也显示出来了
因此在使用WHERE通配符时一定要用括号确定计算次序,括号优先级>AND优先级>OR优先级
IN搜索语句:
如下:从web表中检索alexa为1或者0的数据
可以看到in操作符和OR有相同的功能,但是IN操作符查询的速度更快,语法更清楚
NOT搜索语句:
查询不在这些条件中的数据
六、用通配符进行过滤
6.1LIKE操作符
前面都是对已知值进行过滤的方法,但是这种过滤方法不是任何时候都好用,比如,怎么搜索商品名称包括APP的产品呢?
我们可以使用通配符创建特定的搜索模式。
通配符本身实际是SQL的WHERE字句中有特殊含义的字符,SQL支持几种通配符。为了在搜索子句中使用通配符,必须使用LIKE操作符。表示MYSQL后跟的搜索模式利用通配符匹配而不是相等匹配进行比较的。
6.2%通配符
最常使用的就是百分号,比如找出APP结尾的网址,可以使用SELECT语句:
SELECT name,url FROM web WHERE name LIKE ‘%APP’;
当然%看似可以匹配任何东西,但有一个例外就是null,即使 WHERE name LIKE ‘%’;也不可以匹配null
6.3_通配符
下划线通配符和%不同,下划线只能匹配单个字符,而%可以匹配多个字符,如下当我们用在web表中查询name和url字段时发现没有数据;这是因为_只匹配一个字符,但是我们并没有这种数据。
综述:匹配通配符看似很有用,但是日常中不可过度使用,因为匹配查询效率是非常低的,除非有必要使用,否则不用在搜索模式中
待更新…
本文章关于MySQL的各种知识参照《MySQL必知必会》