简介
MySQL这款软件提供了一个非常快速,多线程,多用户和强悍的SQL(结构化查询语言)数据库器。MySQL服务器是为关键任务,重载生产系统,以及嵌入到大规模部署的软件。
教程目录
1,连接和断开服务器
2,进入查询
3,创建和使用数据库
4,获取数据库和表信息
5,批量使用mysql
6,常用查询样例
7 ,MysQL配合Apache使用
本章通过展示如何使用MysQL客户端程序创建和使用一个简单的数据库来介绍MysQL。mysql(有时被称为“终端监视器”或仅仅是“监视器”)是一个交互式程序,它允许你连接到mysql服务器,运行查询,并查看结果。Mysql也可以在批处理模式下使用:你事先将你的查询放在一个文件中,然后告诉mysgl执行文件的内容。
这里介绍了两种使用mysql的方法要查看mysql提供的选项列表,请使用–help选项调用它:
$> mysql --help
1连接和断开服务器
为了连接到服务器,您通常需要在调用MySQL时提供一个MySQL用户名,很可能还需要一个密码。如果服务器运行在您登录的机器以外的机器上,您还需要指定一个nost名称。联系您的管理员,了解您应该使用什么连接参数进行连接(即,使用什么主机、用户名和密码)。一旦你知道了合适的参数,你应该能够像这样连接:
$> mysql -h host -u user -p
Enter password: ********
host和user表示MySQL服务器运行的主机名和MySQL帐户的用户名。为您的设置替换适当的值。*****代表您的密码,当mysql出现“enter password:”提示时输入。
如果你在MySQL运行的同一台机器上登录,你可以省略主机,只需使用以下命令:
$> mysql -u user -p
mysql>提示符告诉你mysql已经准备好让你输入SQL语句了:
mysql>
当你连接成功后,你可以在mysql>提示符下输入QUIT (or \q) 来断开连接:
mysql> QUIT
Bye
在Linux上,您也可以通过按下Control+D来断开连接。
2 进入查询
如前一节所述,确保您已连接到服务器。这样做本身并不选择要使用的任何数据库,但这是可以的。此时,更重要的是了解如何发出查询,而不是直接创建表、将数据加载到表中并从中检索数据。本节描述了输入查询的基本原则,您可以尝试使用几个查询来熟悉mysql的工作方式。下面是一个简单的查询,它要求服务器告诉您它的版本号和当前日期。在mysgl>提示符下输入,然后按Enter键:
mysql> SELECT VERSION(), CURRENT_DATE;
±-------------±-------------+
| VERSION() | CURRENT_DATE |
±-------------±-------------+
| 5.7.1-m4-log | 2012-12-25 |
±-------------±-------------+
1 row in set (0.01 sec)
mysql>
这个查询说明了关于mysql的一些事情:查询通常由后面跟着分号的SQL语句组成。(有一些例外,分号可以省略。前面提到的guIr就是其中之一。我们稍后会讲到其他内容。)当你发出一个查询时,mysql将它发送到服务器执行,并显示结果,然后打印另一个mysgl>提示,表明它准备好进行另一个查询。Mysql以表格形式(行和列)显示查询输出。第一行包含列的标签。下面的行是查询结果。通常,列标签是从数据库表中获取的列的名称。如果检索的是一个表达式的值,而不是一个表列(如刚才所示的例子),mysql使用表达式本身来标记该列。Mysql显示了返回了多少行以及查询执行了多长时间,这让您大致了解了服务器的性能。这些值是不精确的,因为它们表示挂钟时间(而不是CPU或机器时间),而且它们受到服务器负载和网络延迟等因素的影响。(为了简单起见,“rows in set”行有时不会在本章的其余示例中显示。)关键字可以输入在任何字母。以下查询是等价的:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;
这是另一个问题。它演示了你可以使用mysql作为一个简单的计算器:
mysql> SELECT SIN(PI()/4), (4+1)*5;
±-----------------±--------+
| SIN(PI()/4) | (4+1)*5 |
±-----------------±--------+
| 0.70710678118655 | 25 |
±-----------------±--------+
1 row in set (0.02 sec)
到目前为止显示的查询都是相对较短的单行语句。您甚至可以在一行中输入多个语句。用分号结尾:
mysql> SELECT VERSION(); SELECT NOW();
±-----------------+
| VERSION() |
±-----------------+
| 5.7.10-ndb-7.5.1 |
±-----------------+
1 row in set (0.00 sec)
±--------------------+
| NOW() |
±--------------------+
| 2016-01-29 18:02:55 |
±--------------------+
1 row in set (0.00 sec)
查询不需要在一行中给出所有的内容,因此需要数行的冗长查询不是问题。Mysql通过查找终止分号来确定语句的结束位置,而不是通过查找输入行结束。(换句话说,mysql接受自由格式的输入:它收集输入行,但直到看到分号才执行它们。)下面是一个简单的多行语句:
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
±--------------±-------------+
| USER() | CURRENT_DATE |
±--------------±-------------+
| jon@localhost | 2010-08-06 |
±--------------±-------------+
在本例中,请注意在输入多行查询的第一行后,提示符如何从mysql>更改为->。这就是mysql如何表明它还没有看到一个完整的语句,正在等待剩下的语句。提示是你的好友,因为它提供了有价值的反馈。如果你使用这些反馈,你就可以知道mysql在等待什么。如果你决定你不想执行你正在输入的查询,通过输入\c:
mysql> SELECT
-> USER()
-> \c
mysql>
这里也要注意提示符。在你输入\c后,它切换回mysql>,提供反馈,表明mysql已经准备好进行新的查询。下表显示了您可能看到的每一个提示,并总结了它们对mysql所处状态的含义。
提示 | 意义 |
mysql> | 准备执行新的查询 |
-> | 等待多行查询的下一行 |
"> | 等待下一行,等待以单引号(’)开头的字符串完成 |
`> | 等待下一行,等待以双引号(")开头的字符串完成 |
/*> | 等待下一行,等待以反勾()开头的标识符完成等待下一行 |
/*> | 等待以*/开头的注释完成 |
当您打算在单行上发出查询,但忘记结束分号时,通常会意外地出现多行语句。在这种情况下,mysql等待更多的输入:
mysql> SELECT USER()
->
如果这种情况发生在您身上(您认为您已经输入了一个语句,但唯一的响应是一个->提示符),很可能mysql正在等待分号。如果你没有注意到提示告诉你什么,你可能会在那里坐一会儿才意识到你需要做什么。输入分号完成语句,mysql执行它:
mysql> SELECT USER()
-> ;
±--------------+
| USER() |
±--------------+
| jon@localhost |
±--------------+
‘>和’>提示发生在字符串收集期间(另一种方式表示MySQL正在等待一个字符串完成)。在MysQL中,你可以写由’或’字符包围的字符串(例如,‘hello’或’ goodbye ‘), MysQL允许你输入跨多行字符串。当您看到’>或’>提示符时,这意味着您已经输入了包含以’或’ '引号开头的字符串的行,但还没有输入匹配的引号以结束字符串。这通常表示您无意中遗漏了一个引用字符。例如:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
如果您输入这个SELECr语句,然后按enter键并等待结果,什么也不会发生。不要疑惑为什么这个查询花了这么长的时间,请注意’>提示符提供的线索。它告诉你mysql希望看到一个未结束字符串的剩余部分。你看到声明中的错误了吗?字符串’Smith缺少第二个单引号。)在这一点上,你会怎么做?最简单的方法是取消查询。然而,在这种情况下,你不能只输入\c,因为mysql将其解释为它正在收集的字符串的一部分。相反,输入结束引号字符(这样mysql就知道你已经完成了字符串),然后输入\c:
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'> '\c
mysql>
提示符返回到mysql>,表明mysql已经准备好进行新的查询。“>”提示符类似于“>”和“>”提示符,但它表示您已经开始使用后引号引号括起来的标识符,但还没有完成。了解‘>’、‘>’和‘>提示符表示什么是很重要的,因为如果您错误地输入了一个未终止的字符串,那么您输入的任何其他行都会被mysql忽略——包括包含QUI的行。这可能非常令人困惑,特别是如果您不知道在取消当前查询之前需要提供终止报价的话。
请注意从此以后,编写多行语句时将不需要辅助(->或其他)提示,以便更容易地复制和粘贴语句。