为了连接服务器,当调用mysql时,通常需要提供一个MySQL用户名并且很可能需要一个
密码。如果服务器运行在登录服务器之外的其它机器上,还需要指定主机名。联系管理员以找出进行连接所使用的参数(即,连接的主机、用户名和使用的密码)。知道正确的参数后,可以按照以下方式进行连接:shell>mysql -h host -u user -p
Enter password:********
host和user分别代表MySQL服务器运行的主机名和MySQL账户用户名。设置时替换为正确的值。********代表你的密码;当mysql显示Enter
password:提示时输入它。
如果有效,你应该看见mysql>提示符后的一些介绍信息:
shell>mysql -h host -u user -p
Enter password:********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 25338 to server version: 5.1.2-alpha-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
mysql>提示符告诉你mysql准备为你输入命令。
一些MySQL安装允许用户以匿名(未命名)用户连接到本地主机上运行的服务器。如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:
shell>mysql
成功地连接后,可以在mysql>提示下输入QUIT(或\q)随时退出:
mysql>QUIT
Bye
在Unix中,也可以按control-D键断开服务器。
在下列章节的大多数例子都假设你连接到了服务器。由mysql>提示指明。
3.2. 输入查询
确保你连接上了服务器,如在先前的章节讨论的。连接上服务器并布代表选择了任何数据库,但这样就可以了。知道关于如何查询的基本知识,比马上跳至创建表、给他们装载数据并且从他们检索数据更重要。本节描述输入命令的基本原则,使用几个查询,你能尝试了解mysql是如何工作的。
这是一个简单的命令,要求服务器告诉它的版本号和当前日期。在mysql>提示输入如下命令并按回车键:
mysql>SELECT VERSION(), CURRENT_DATE;
+-----------------+--------------+
| VERSION() | CURRENT_DATE |
+-----------------+--------------+
| 5.1.2-alpha-log | 2005-10-11 |
+-----------------+--------------+
1 row in set (0.01 sec)
mysql>
这询问说明mysql的几个方面:
·一个命令通常由SQL语句组成,随后跟着一个分号。(有一些例外不需要分号。早先提到的QUIT是一个例子。后面我们将看到其它的例子。)
·当发出一个命令时,mysql将它发送给服务器并显示执行结果,然后显示另一个mysql>显示它准备好接受其它命令。
·mysql用表格(行和列)方式显示查询输出。第一行包含列的标签,随后的行是查询结果。通常,列标签是你取自数据库表的列的名字。如果你正在检索一个表达式而非表列的值(如刚才的例子),mysql用表达式本身标记列。
·mysql显示返回了多少行,以及查询花了多长时间,它给你提供服务器性能的一个大致概念。因为他们表示时钟时间(不是CPU或机器时间),并且因为他们受到诸如服务器负载和网络延时的影响,因此这些值是不精确的。(为了简洁,在本章其它例子中不再显示“集合中的行”。)
能够以大小写输入关键词。下列查询是等价的:
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.1.2-alpha-log |
+-----------------+
1 row in set (0.00 sec)
+---------------------+
| NOW() |
+---------------------+
| 2005-10-11 15:15:00 |
+---------------------+
1 row in set (0.00 sec)
不必全在一个行内给出一个命令,较长命令可以输入到多个行中。mysql通过寻找终止分号而不是输入行的结束来决定语句在哪儿结束。(换句话说,mysql接受自由格式的输入:它收集输入行但直到看见分号才执行。)
这里是一个简单的多行语句的例子:
mysql>SELECT
->USER()
->,
->CURRENT_DATE;
+---------------+--------------+
| USER() | CURRENT_DATE |
+---------------+--------------+
| jon@localhost | 2005-10-11 |
+---------------+--------------+
在这个例子中,在输入多行查询的第一行后,要注意提示符如何从mysql>变为->,这正是mysql如何指出它没见到完整的语句并且正在等待剩余的部分。提示符是你的朋友,因为它提供有价值的反馈,如果使用该反馈,将总是知道mysql正在等待什么。
如果你决定不想执行正在输入过程中的一个命令,输入\c取消它:
mysql>SELECT
->USER()
->\c
mysql>
这里也要注意提示符,在你输入\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
3.7.2. 显示孪生对状态的表
每一次会面以一个称为event的状态码结束。下面显示的查询被用来显示按事件组合的所有孪生的表。这表明多少对孪生已经完成,多少对的其中之一已完成而另一个拒绝了,等等。SELECT
t1.event,
t2.event,
COUNT(*)
FROM
lentus AS t1,
lentus AS t2,
twin_project AS tp
WHERE
t1.id = tp.id
AND t1.tvab=tp.tvab
AND t1.id = t2.id
AND tp.survey_no = 5
AND t1.tvab='1' AND t2.tvab='2'
GROUP BY
t1.event, t2.event;
3.8. 与Apache一起使用MySQL
还有一些项目,你可以从MySQL数据库鉴别用户,并且你还可以将日志文件写入MySQL数据库表。
你可以将以下内容放到Apache配置文件中,更改Apache日志格式,使MySQL更容易读取:
LogFormat \
"\"%h\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Type}o\", \
\"%U\",\"%{Referer}i\",\"%{User-Agent}i\""
要想将该格式的日志文件装载到MySQL,你可以使用以下语句:
LOAD DATA INFILE '/local/access_log' INTO TABLEtbl_name
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
所创建的表中的列应与写入日志文件的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等技术。
上一篇:下一篇: