一、使用Mysql
1. 连接
- 为了连接到MySQL,需要以下信息:
- 主机名(计算机名):参数:-h + 主机名(如果连接到本地MySQL服务器,主机名为localhost)。
- 端口号:(如果使用默认端口3306之外的端口):参数:-P + 端口号。
- 一个合法的用户名:参数:-u + 用户名。
- 用户口令(如果需要):参数:-p + 密码 (密码可以换行输入)。
- 利用 mysql 命令行演示登录指令,如下图:
- 解释:上图第一行,mysql 后从左到右分别是(-h + 主机名),(-P + 端口号),(-u + 用户名),(-p)。若省略(-h + 主机名),则主机名默认为本机localhost,若省略(-P + 端口号),则默认为3306,(-u)和(-p)不能省略。
- 第二行则是输入密码,也可以直接在第一行的(-p)后输入密码,然后【Enter】键登录。
- 在连接之后,你就可以访问你的登录名能够访问的任意数据库和表了。
2. 选择数据库
- 特别注意!!
- 下面所有的输入语句,都是要以(;)结尾的,不然会报错。
- SQL语句不区分大小写,因此SELECT与select是相同的。 同样,写成Select也没有关系。许多SQL开发人员喜欢对所有SQL关键字使用大写,而对所有列和表名使用小写,这样做使代码更易于阅读和调试。最佳方式是按照大小写的惯例,且使用时保持一致。
- 使用空格:在处理SQL语句时,其中所有空格都被忽略。 SQL语句可以在一行上给出,也可以分成许多行。多数SQL开发人员认为将SQL语句分成多行更容易阅读和调试。
- 在你最初连接到MySQL时,没有任何数据库打开供你使用。在你能执行任意数据库操作前,需要选择一个数据库。为此,可使用USE关键字。
- 例如,为了使用 crashcourse数据库,应该输入以下内容:
- 输入:USE crashcourse;
- 输出:Database changed
- 注意:USE 语句并不返回任何结果。依赖于使用的客户机,显示某种形式的通知。例如,这里显示出的Database changed消息是 mysql命令行实用程序在数据库选择成功后显示的。
- 记住,必须先使用USE打开数据库,才能读取其中的数据。
3. 了解数据库和表
1. 如果你不知道可以使用的数据库名时怎么办?可用MySQL的SHOW命令来显示这些信息(MySQL从内部表中提取这些信息)。 请看下面的例子:
- 输入:SHOW DATABASES;
- 输出如下:
- 分析:SHOW DATABASES;指令,返回可用数据库的一个列表。 包含在这个列表中的可能是MySQL内部使用的数据库(如例子中的mysql和information_schema)。当然,你自己的数据库列表可能看上去与这里的不一样。
2. 为了获得一个数据库内的表的列表 ,如下所示:
- 输入:SHOW TABLES;
- 输出如下:
- 分析:SHOW TABLES; 返回当前选择的数据库内可用表的列表。
3. 为了获得一个数据库内的表的列表 ,如下所示:
- 输入:SHOW TABLES;
- 输出如下:
- 分析:SHOW TABLES; 返回当前选择的数据库内可用表的列表。
4. SHOW指令也可以用来显示表列,如下所示:
- 输入:SHOW COLUMNS FROM customers;
- 输出如下:
- 分析:SHOW COLUMNS 要求给出一个表名(这个例子中的 FROM customers),它对表中的每个字段都返回一行,行中包含字段名、数据类型、是否允许NULL、键信息、默认值以及其他信息(如字段cust_id的auto_increment)。
- 补充: DESCRIBE语句;MySQL支持用DESCRIBE 作为SHOW COLUMNS FROM的一种快捷方式。 换句话说,DESCRIBE customers; 是SHOW COLUMNS FROM customers; 的一种快捷方式。
- 输入:DESCRIBE customers;
- 输出如下:
- 可以发现,结果是和 SHOW COLUMNS FROM customers; 语句的结果是一样的。
5. 其他的SHOW 语句
- mysql 所支持的其他SHOW语句还有:
- SHOW STATUS;用于显示广泛的服务器状态信息。
- SHOW CREATE DATABASE和SHOW CREATE TABLE 分别用来显示创建特定数据库或表的MySQL语句。
- SHOW GRANTS;用来显示授予用户(所有用户或特定用户)的安全权限。
- SHOW ERRORS和SHOW WARNINGS;用来显示服务器错误或警告消息。
- 有兴趣的朋友可以自己去尝试一下吧,这里就不再赘述了。
二、检索数据
- 本章将介绍如何使用SELECT语句从表中检索一个或多个数据列。
- SQL语句是由简单的英语单词构成的。这些单词称为关键字,每个SQL语句都是由一个或多个关键字构成的。最经常使用的SQL语句就是SELECT语句了。它的用途是从一个或多个表中检索信息。
- 为了使用SELECT检索表数据,必须至少给出两条信息——想选择什么,以及从什么地方选择。
1. 检索单个列
- 我们将从简单的SQL SELECT语句开始介绍,此语句如下所示:
- 输入:SELECT prod_name FROM products;
- 输出如下:
- 分析:上述语句利用SELECT语句从products表中检索一个名为prod_name的列。所需的列名在SELECT关键字之后给出,FROM关键字指出从其中检索数据的表名。
- 未排序数据: 如果读者自己试验这个查询,可能会发现显示输出的数据顺序与这里的不同。出现这种情况很正常。如果没有明确排序查询结果(下一章介绍),则返回的数据的顺序没有特殊意义。返回数据的顺序可能是数据被添加到表中的顺序,也可能不是。只要返回相同数目的行,就是正常的。
2. 检索多个列
- 要想从一个表中检索多个列,使用相同的SELECT语句。唯一的不同是必须在SELECT关键字后给出多个列名,列名之间必须以逗号分隔。
- 下面的SELECT语句从products表中选择3列:
- 输入:SELECT prod_id,prod_name,prod_price FROM products;
- 输出如下:
- 分析:与前一个例子一样,这条语句使用SELECT语句从表products 中选择数据。在这个例子中,指定了3个列名,列名之间用逗号分隔。
3. 检索所有列
- 除了指定所需的列外(如上所述,一个或多个列),SELECT语句还可以检索所有的列而不必逐个列出它们。这可以通过在实际列名的位置使用星号(*)通配符来达到,如下所示:
- 输入:SELECT * FROM products;
- 输出如下:
- 分析:如果给定一个通配符(*),则返回表中所有列。列的顺序一般是列在表定义中出现的顺序。但有时候并不是这样的,表的模式的变化(如添加或删除列)可能会导致顺序的变化。
- 检索未知列: 使用通配符(*)有一个大优点。由于不明确指定列(因为星号检索每个列),所以能检索出名字未知的列。
4. 检索不同的行
- 正如所见,SELECT返回所有匹配的行。但是,如果你不想要每个值重复出现,怎么办?例如,假如你想得出products表中产品的所有供应商ID:
- 输入:SELECT vend_id From products;
- 输出如下:
- SELECT语句返回14行(即使表中只有4个供应商),因为products表中有14个产品。那么,如何检索出有不同且唯一值的列表呢?
- 解决办法是使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值。 如下:
- 输入:SELECT DISTINCT vend_id FROM products;
- 输出如下:
- 分析:SELECT DISTINCT vend_id 告诉MySQL只返回不同(唯一)的vend_id行,因此只返回4行。如果使用 DISTINCT关键字,它必须直接放在所有列名的前面。
- 注意!不能部分使用DISTINCT: DISTINCT关键字应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT vend_id, prod_price,除非指定的两个列都不同,否则所有行都将被检索出来。
5. 限制结果
- SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了只返回第一行或前几行,可使用LIMIT子句。下面举一个例子:
- 输入:SELECT prod_name FROM products LIMIT 5;
- 输出如下:
- 分析:此语句使用SELECT语句检索单个列。LIMIT 5 指示MySQL返回的行数不多于5行。
- LIMIT 也可以指定显示行数的范围 ,如下:
- 输入:SELECT prod_name FROM products LIMIT 5,5;
- 输出如下:
- 分析:LIMIT 5, 5指示MySQL返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。
- 所以,带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。
- 注意: 检索出来的第一行为行0而不是行1。因此,LIMIT 1, 1将检索出第二行而不是第一行。如果没有足够的行(例如,给出LIMIT 10, 5,但只有13行),MySQL将只返回它能返回的那么多行。
- 另外,MySQL 5版本后支持LIMIT的另一种替代语法。LIMIT 4 OFFSET 3意为从行3开始取4行,就像LIMIT 3, 4一样。
6. 使用完全限定的表名
- 迄今为止使用的SQL例子只通过列名引用列,我们也可以使用完全限定的名字来引用列(同时使用表名和列字) ,在以后有一些情形需要完全限定名。现在需要注意这个语法,以便在遇到时知道它的作用。请看以下例子:
- 输入:SELECT products.prod_name FROM products;
- 这条语句等同于 SELECT prod_name FROM products;这里使用了完全限定的列名。
- 表名也可以是完全限定的,如下所示:
- 输入:SELECT products.prod_name FROM crashcourse.products;
- 这条语句在功能上也等同于上面那条语句(当然,假定products表确实位于crashcourse数据库中。
三、总结
- 好啦,朋友们,以上就是MySQL数据库第二篇博客的全部内容了,本篇学习了如何在MySQL命令行连接数据库和使用SQL的SELECT语句来检索单个表列、多个表列以及所有表列。下一篇将分享如何排序和过滤检索出来的数据的知识啦。
- 最后,如果本文有不足之处,欢迎各位大佬批评指正。若本文对您有帮助的话,就给小白博主点个赞吧!欢迎在评论区一起交流学习哦!我们下次再见!!