为了连接服务器,当调用
mysql时,通常需要提供一个
MySQL用户名并且很可能需要一个
密码。如果服务器运行在登录服务器之外的其它机器上,还需要指定主机名。联系管理员以找出进行连接所使用的参数
(即,连接的主机、用户名和使用的密码
)。知道正确的参数后,可以按照以下方式进行连接:
1 | <span>shell> </span><span><b><span>mysql -h <i>host</i> -u <i>user</i> -p</span></b></span>
|
1 | <span>Enter password: </span><span><b><span>********</span></b></span>
|
host和user分别代表MySQL服务器运行的主机名和MySQL账户用户名。设置时替换为正确的值。********
代表你的密码;当mysql显示Enter
password:提示时输入它。
如果有效,你应该看见mysql>提示符后的一些介绍信息:
1 | <span>shell> </span><span><b><span>mysql -h <i>host</i> -u <i>user</i> -p</span></b></span>
|
1 | <span>Enter password: </span><span><b><span>********</span></b></span>
|
1 | <span>Welcome to the MySQL monitor. Commands end with ; or \g.</span>
|
1 | <span>Your MySQL connection id is 25338 to server version: 5.1.2-alpha-standard</span>
|
1 | <span>Type 'help;' or '\h' for help. Type '\c' to clear the buffer.</span>
|
mysql> 提示符告诉你mysql准备为你输入命令。
一些MySQL安装允许用户以匿名(未命名)用户连接到本地主机上运行的服务器。如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:
1 | <span>shell> </span><span><b><span>mysql</span></b></span>
|
成功地连接后,可以在mysql>提示下输入QUIT
(或\q)随时退出:
1 | <span>mysql> </span><span><b><span>QUIT</span></b></span>
|
在Unix中,也可以按control-D键断开服务器。
在下列章节的大多数例子都假设你连接到了服务器。由mysql>提示指明。
3.2. 输入查询
确保你连接上了服务器,如在先前的章节讨论的。连接上服务器并布代表选择了任何数据库,但这样就可以了。知道关于如何查询的基本知识,比马上跳至创建表、给他们装载数据并且从他们检索数据更重要。本节描述输入命令的基本原则,使用几个查询,你能尝试了解mysql是如何工作的。
这是一个简单的命令,要求服务器告诉它的版本号和当前日期。在mysql>提示输入如下命令并按回车键:
1 | <span>mysql> </span><span><b><span>SELECT VERSION(), CURRENT_DATE;</span></b></span>
|
1 | <span>+-----------------+--------------+</span>
|
1 | <span>| VERSION() | CURRENT_DATE |</span>
|
1 | <span>+-----------------+--------------+</span>
|
1 | <span>| 5.1.2-alpha-log | 2005-10-11 |</span>
|
1 | <span>+-----------------+--------------+</span>
|
1 | <span>1 row in set (0.01 sec)</span>
|
这询问说明mysql的几个方面:
·
一个命令通常由SQL语句组成,随后跟着一个分号。(有一些例外不需要分号。早先提到的QUIT是一个例子。后面我们将看到其它的例子。)
·
当发出一个命令时,mysql将它发送给服务器并显示执行结果,然后显示另一个mysql>显示它准备好接受其它命令。
·
mysql用表格(行和列)方式显示查询输出。第一行包含列的标签,随后的行是查询结果。通常,列标签是你取自数据库表的列的名字。如果你正在检索一个表达式而非表列的值(如刚才的例子),mysql用表达式本身标记列。
·
mysql显示返回了多少行,以及查询花了多长时间,它给你提供服务器性能的一个大致概念。因为他们表示时钟时间(不是
CPU 或机器时间),并且因为他们受到诸如服务器负载和网络延时的影响,因此这些值是不精确的。(为了简洁,在本章其它例子中不再显示“集合中的行”。)
能够以大小写输入关键词。下列查询是等价的:
1 | <span>mysql> </span><span><b><span>SELECT VERSION(), CURRENT_DATE;</span></b></span>
|
1 | <span>mysql> </span><span><b><span>select version(), current_date;</span></b></span>
|
1 | <span>mysql> </span><span><b><span>SeLeCt vErSiOn(), current_DATE;</span></b></span>
|
这是另外一个查询,它说明你能将mysql用作一个简单的计算器:
1 | <span>mysql> </span><span><b><span>SELECT SIN(PI()/4), (4+1)*5;</span></b></span>
|
1 | <span>+------------------+---------+</span>
|
1 | <span>| SIN(PI()/4) | (4+1)*5 |</span>
|
1 | <span>+------------------+---------+</span>
|
1 | <span>| 0.70710678118655 | 25 |</span>
|
1 | <span>+------------------+---------+</span>
|
1 | <span>1 row in set (0.02 sec)</span>
|
至此显示的命令是相当短的单行语句。你可以在一行上输入多条语句,只需要以一个分号间隔开各语句:
1 | <span>mysql> </span><span><b><span>SELECT VERSION(); SELECT NOW();</span></b></span>
|
1 | <span>+-----------------+</span>
|
1 | <span>| VERSION() |</span>
|
1 | <span>+-----------------+</span>
|
1 | <span>| 5.1.2-alpha-log |</span>
|
1 | <span>+-----------------+</span>
|
1 | <span>1 row in set (0.00 sec)</span>
|
1 | <span>+---------------------+</span>
|
1 | <span>+---------------------+</span>
|
1 | <span>| 2005-10-11 15:15:00 |</span>
|
1 | <span>+---------------------+</span>
|
1 | <span>1 row in set (0.00 sec)</span>
|
不必全在一个行内给出一个命令,较长命令可以输入到多个行中。mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束。(换句话说,mysql接受自由格式的输入:它收集输入行但直到看见分号才执行。)
这里是一个简单的多行语句的例子:
1 | <span>mysql> </span><span><b><span>SELECT</span></b></span>
|
1 | <span> -> </span><span><b><span>USER()</span></b></span>
|
1 | <span> -> </span><span><b><span>,</span></b></span>
|
1 | <span> -> </span><span><b><span>CURRENT_DATE;</span></b></span>
|
1 | <span>+---------------+--------------+</span>
|
1 | <span>| USER() | CURRENT_DATE |</span>
|
1 | <span>+---------------+--------------+</span>
|
1 | <span>| jon@localhost | 2005-10-11 |</span>
|
1 | <span>+---------------+--------------+</span>
|
在这个例子中,在输入多行查询的第一行后,要注意提示符如何从mysql>变为->,这正是mysql如何指出它没见到完整的语句并且正在等待剩余的部分。提示符是你的朋友,因为它提供有价值的反馈,如果使用该反馈,将总是知道mysql正在等待什么。
如果你决定不想执行正在输入过程中的一个命令,输入\c取消它:
1 | <span>mysql> </span><span><b><span>SELECT</span></b></span>
|
1 | <span> -> </span><span><b><span>USER()</span></b></span>
|
1 | <span> -> </span><span><b><span>\c</span></b></span>
|
这里也要注意提示符,在你输入\c以后,它切换回到mysql>,提供反馈以表明mysql准备接受一个新命令。
下表显示出可以看见的各个提示符并简述它们所表示的mysql的状态:
提示符
|
含义
|
mysql>
|
准备好接受新命令。
|
->
|
等待多行命令的下一行。
|
'>
|
等待下一行,等待以单引号(“'”)开始的字符串的结束。
|
">
|
等待下一行,等待以双引号(“"”)开始的字符串的结束。
|
`>
|
等待下一行,等待以反斜点(‘`’)开始的识别符的结束。
|
LEFT JOIN twin_data AS td ON tp.id = td.id
AND tp.tvab = td.tvab
LEFT JOIN informant_data AS id ON tp.id = id.id
AND tp.tvab = id.tvab
LEFT JOIN harmony AS h ON tp.id = h.id
AND tp.tvab = h.tvab
LEFT JOIN lentus AS l ON tp.id = l.id
AND tp.tvab = l.tvab
LEFT JOIN twin_data AS td2 ON p2.id = td2.id
AND p2.tvab = td2.tvab
LEFT JOIN informant_data AS id2 ON p2.id = id2.id
AND p2.tvab = id2.tvab
LEFT JOIN harmony AS h2 ON p2.id = h2.id
AND p2.tvab = h2.tvab
LEFT JOIN lentus AS l2 ON p2.id = l2.id
AND p2.tvab = l2.tvab,
person_data AS p1,
person_data AS p2,
postal_groups AS pg
WHERE
p1.id = tp.id AND p1.tvab = tp.tvab AND
p2.id = p1.id AND p2.ptvab = p1.tvab AND
tp.survey_no = 5 AND
(p2.dead = 0 OR p2.dead = 9 OR
(p2.dead = 1 AND
(p2.death_date = 0 OR
(((TO_DAYS(p2.death_date) - TO_DAYS(p2.birthday)) / 365)
>= 65))))
AND
(
(td.future_contact = 'Yes' AND td.suspect = 2) OR
(td.future_contact = 'Yes' AND td.suspect = 1
AND id.suspect = 1) OR
(ISNULL(td.suspect) AND id.suspect = 1
AND id.future_contact = 'Yes') OR
(td.participation = 'Aborted'
AND id.suspect = 1 AND id.future_contact = 'Yes') OR
(td.participation = 'Aborted' AND ISNULL(id.suspect)
AND p2.dead = 0))
AND
l.event = 'Finished'
AND SUBSTRING(p1.postal_code, 1, 2) = pg.code
AND (h.nurse IS NULL OR h.nurse=00 OR h.doctor=00)
AND NOT (h.status = 'Refused' OR h.status = 'Aborted'
OR h.status = 'Died' OR h.status = 'Other')
ORDER BY
tvid;
一些解释:
·
CONCAT(p1.id, p1.tvab) + 0
AS tvid
我们想要在id和tvab的连接上以数字顺序排序。结果加0使得MySQL把结果变为一个数字。
·
列id
这标识一对孪生。它是所有表中的一个键。
·
列tvab
这标识孪生中的一个。它的值为1或2。
·
列ptvab
这是tvab的一个逆运算。当tvab是1,它是2,反之亦然。它用来保存输入并且使MySQL的优化查询更容易。
这个查询表明,怎样用联结(p1和p2)从同一个表中查找表。在例子中,这被用来检查孪生的一个是否在65岁前死了。如果如此,行不返回值。
上述所有孪生信息存在于所有表中。我们对id,tvab(所有表)和id,ptvab
(person_data)
上采用键以使查询更快。
在我们的生产机器上(一台200MHz
UltraSPARC),这个查询返回大约 150-200
行并且时间不超过一秒。
表
|
行数
|
person_data
|
71074
|
lentus
|
5291
|
twin_project
|
5286
|
twin_data
|
2012
|
informant_data
|
663
|
harmony
|
381
|
postal_groups
|
100
|
每一次会面以一个称为 event的状态码结束。下面显示的查询被用来显示按事件组合的所有孪生的表。这表明多少对孪生已经完成,多少对的其中之一已完成而另一个拒绝了,等等。
1 | <span> lentus AS t1,</span>
|
1 | <span> lentus AS t2,</span>
|
1 | <span> twin_project AS tp</span>
|
1 | <span> t1.id = tp.id</span>
|
1 | <span> AND t1.tvab=tp.tvab</span>
|
1 | <span> AND t1.id = t2.id</span>
|
1 | <span> AND tp.survey_no = 5</span>
|
1 | <span> AND t1.tvab= '1' AND t2.tvab= '2' </span>
|
1 | <span> t1.event, t2.event;</span>
|
3.8. 与Apache一起使用MySQL
还有一些项目,你可以从 MySQL数据库鉴别用户,并且你还可以将日志文件写入 MySQL数据库表。
你可以将以下内容放到Apache配置文件中,更改Apache日志格式,使MySQL更容易读取:
1 | <span> "\"%h\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Type}o\", \</span>
|
1 | <span> \ "%U\",\"%{Referer}i\",\"%{User-Agent}i\"" </span>
|
要想将该格式的日志文件装载到MySQL,你可以使用以下语句:
1 | <span>LOAD DATA INFILE '</span><span><i><span>/local/access_log</span></i></span><span>' INTO TABLE </span><span><i><span>tbl_name</span></i></span>
|
1 | <span>FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' </span>
|
所创建的表中的列应与写入日志文件的LogFormat行对应。
这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com。
原始参考手册为英文版,与英文版参考手册相比,本翻译版可能不是最新的。
Linux公社(www.linuxidc.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。 Linux公社是专业的Linux系统门户网站,实时发布最新Linux资讯,包括Linux、Ubuntu、Fedora、RedHat、红旗Linux、Linux教程、Linux认证、SUSE Linux、Android、Oracle、Hadoop、CentOS等技术。
|