mySQL教程.docx

上传人:b****5 文档编号:3526500 上传时间:2022-11-23 格式:DOCX 页数:53 大小:59.02KB
下载 相关 举报
mySQL教程.docx_第1页
第1页 / 共53页
mySQL教程.docx_第2页
第2页 / 共53页
mySQL教程.docx_第3页
第3页 / 共53页
mySQL教程.docx_第4页
第4页 / 共53页
mySQL教程.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

mySQL教程.docx

《mySQL教程.docx》由会员分享,可在线阅读,更多相关《mySQL教程.docx(53页珍藏版)》请在冰豆网上搜索。

mySQL教程.docx

mySQL教程

∙前言

∙1.一般信息

∙2.安装MySQL

∙3.教程

∙4.MySQL程序概述

∙5.数据库管理

∙6.中的复制

∙7.优化

∙8.客户端和实用工具程序

∙9.语言结构

∙10.字符集支持

∙11.列类型

∙12.函数和操作符

∙13.SQL语句语法

∙14.插件式存储引擎体系结构

∙15.存储引擎和表类型

∙16.编写自定义存储引擎

∙17.MySQL簇

∙18.分区

∙19.中的空间扩展

∙20.存储程序和函数

∙21.触发程序

∙22.视图

∙23.INFORMATION_SCHEMA信息数据库

∙24.精度数学

∙25.API和库

∙26.连接器

∙27.扩展MySQL

∙A.问题和常见错误

∙B.错误代码和消息

∙C.感谢

∙D.MySQL变更史

∙E.移植到其他系统

∙F.环境变量

∙G.正则表达式

∙H.LimitsinMySQL

∙I.特性限制

∙J.GNU通用公共许可

∙K.MySQLFLOSS许可例外

∙索引

第3章:

教程

目录

3.1.连接与断开服务器

3.2.输入查询

3.3.创建并使用数据库

3.3.1.创建并选择数据库

3.3.2.创建表

3.3.3.将数据装入表中

3.3.4.从表检索信息

3.4.获得数据库和表的信息

3.5.在批处理模式下使用mysql

3.6.常用查询的例子

3.6.1.列的最大值

3.6.2.拥有某个列的最大值的行

3.6.3.列的最大值:

按组

3.6.4.拥有某个字段的组间最大值的行

3.6.5.使用用户变量

3.6.6.使用外键

3.6.7.根据两个键搜索

3.6.8.根据天计算访问量

3.6.9.使用AUTO_INCREMENT

3.7.孪生项目的查询

3.7.1.查找所有未分发的孪生项

3.7.2.显示孪生对状态的表

3.8.与Apache一起使用MySQL

本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门教程。

mysql(有时称为“终端监视器”或只是“监视”)是一个交互式程序,允许你连接一个MySQL服务器,运行查询并察看结果。

mysql可以用于批模式:

你预先把查询放在一个文件中,然后告诉mysql执行文件的内容。

本章将介绍使用mysql的两个方法。

要想查看由mysql提供的选择项目表,可以用--help选项来调用:

shell>mysql--help

本章假定mysql已经被安装在你的机器上,并且有一个MySQL服务器可以连接。

否则,请联络MySQL管理员。

(如果你是管理员,则需要查阅本手册的其它章节,例如第5章:

数据库管理。

本章描述建立和使用一个数据库的全过程。

如果你仅仅对访问一个已经存在的数据库感兴趣,可以跳过描述怎样创建数据库及它所包含的表的章节。

由于本章是一个教程,省略了许多细节。

关于这里所涉及的主题的详细信息,请查阅本手册的相关章节。

3.1. 连接与断开服务器

为了连接服务器,当调用mysql时,通常需要提供一个MySQL用户名并且很可能需要一个密码。

如果服务器运行在登录服务器之外的其它机器上,还需要指定主机名。

联系管理员以找出进行连接所使用的参数(即,连接的主机、用户名和使用的密码)。

知道正确的参数后,可以按照以下方式进行连接:

shell>mysql-hhost-uuser-p

Enterpassword:

********

host和user分别代表MySQL服务器运行的主机名和MySQL账户用户名。

设置时替换为正确的值。

********代表你的密码;当mysql显示Enterpassword:

提示时输入它。

如果有效,你应该看见mysql>提示符后的一些介绍信息:

shell>mysql-hhost-uuser-p

Enterpassword:

********

WelcometotheMySQLmonitor. Commandsendwith;or\g.

YourMySQLconnectionidis25338toserverversion:

5.1.2-alpha-standard

 

Type'help;'or'\h'forhelp.Type'\c'toclearthebuffer.

 

mysql>

mysql>提示符告诉你mysql准备为你输入命令。

一些MySQL安装允许用户以匿名(未命名)用户连接到本地主机上运行的服务器。

如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:

shell>mysql

成功地连接后,可以在mysql>提示下输入QUIT(或\q)随时退出:

mysql>QUIT

Bye

在Unix中,也可以按control-D键断开服务器。

在下列章节的大多数例子都假设你连接到了服务器。

由mysql>提示指明。

3.2. 输入查询

确保你连接上了服务器,如在先前的章节讨论的。

连接上服务器并布代表选择了任何数据库,但这样就可以了。

知道关于如何查询的基本知识,比马上跳至创建表、给他们装载数据并且从他们检索数据更重要。

本节描述输入命令的基本原则,使用几个查询,你能尝试了解mysql是如何工作的。

这是一个简单的命令,要求服务器告诉它的版本号和当前日期。

在mysql>提示输入如下命令并按回车键:

mysql>SELECTVERSION(),CURRENT_DATE;

+-----------------+--------------+

|VERSION()      |CURRENT_DATE|

+-----------------+--------------+

|5.1.2-alpha-log|2005-10-11  |

+-----------------+--------------+

1rowinset(0.01sec)

mysql>

这询问说明mysql的几个方面:

·        一个命令通常由SQL语句组成,随后跟着一个分号。

(有一些例外不需要分号。

早先提到的QUIT是一个例子。

后面我们将看到其它的例子。

·        当发出一个命令时,mysql将它发送给服务器并显示执行结果,然后显示另一个mysql>显示它准备好接受其它命令。

·        mysql用表格(行和列)方式显示查询输出。

第一行包含列的标签,随后的行是查询结果。

通常,列标签是你取自数据库表的列的名字。

如果你正在检索一个表达式而非表列的值(如刚才的例子),mysql用表达式本身标记列。

·        mysql显示返回了多少行,以及查询花了多长时间,它给你提供服务器性能的一个大致概念。

因为他们表示时钟时间(不是CPU或机器时间),并且因为他们受到诸如服务器负载和网络延时的影响,因此这些值是不精确的。

(为了简洁,在本章其它例子中不再显示“集合中的行”。

能够以大小写输入关键词。

下列查询是等价的:

mysql>SELECTVERSION(),CURRENT_DATE;

mysql>selectversion(),current_date;

mysql>SeLeCtvErSiOn(),current_DATE;

这是另外一个查询,它说明你能将mysql用作一个简单的计算器:

mysql>SELECTSIN(PI()/4),(4+1)*5;

+------------------+---------+

|SIN(PI()/4)     |(4+1)*5|

+------------------+---------+

|0.70710678118655|     25|

+------------------+---------+

1rowinset(0.02sec)

至此显示的命令是相当短的单行语句。

你可以在一行上输入多条语句,只需要以一个分号间隔开各语句:

mysql>SELECTVERSION();SELECTNOW();

+-----------------+

|VERSION()      |

+-----------------+

|5.1.2-alpha-log|

+-----------------+

1rowinset(0.00sec)

 

+---------------------+

|NOW()              |

+---------------------+

|2005-10-1115:

15:

00|

+---------------------+

1rowinset(0.00sec)

不必全在一个行内给出一个命令,较长命令可以输入到多个行中。

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>

准备好接受新命令。

->

等待多行命令的下一行。

'>

等待下一行,等待以单引号(“'”)开始的字符串的结束。

">

等待下一行,等待以双引号(“"”)开始的字符串的结束。

`>

等待下一行,等待以反斜点(‘`’)开始的识别符的结束。

/*>

等待下一行,等待以/*开始的注释的结束。

当你打算在一个单行上发出一个命令时,通常会“偶然”出现多行语句,但是没有终止分号。

在这种情况中,mysql等待进一步输入:

mysql>SELECTUSER()

   ->

如果出现这种情况(你认为输完了语句,但是只有一个->提示符响应),很可能mysql正在等待分号。

如果你没有注意到提示符的提示,在意识到你需要做什么之前,你可能会呆坐一会儿。

输入一个分号完成语句,mysql将执行:

mysql>SELECTUSER()

   ->;

+---------------+

|USER()       |

+---------------+

|jon@localhost|

+---------------+

在字符串收集期间将出现'>和">提示符(提示MySQL正等待字符串的结束)。

在MySQL中,可以写由‘'’或‘"’字符括起来的字符串(例如,'hello'或"goodbye"),并且mysql允许输入跨越多行的字符串。

当看到一个'>或">提示符时,这意味着已经输入了包含以‘'’或‘"’括号字符开始的字符串的一行,但是还没有输入终止字符串的匹配引号。

这显示你粗心地省掉了一个引号字符。

例如:

mysql>SELECT*FROMmy_tableWHEREname='SmithANDage<30;

   '>

如果你输入SELECT语句,然后按Enter(回车)键并等待结果,什么都没有出现。

不要惊讶,“为什么该查询这么长呢?

”,注意">提示符提供的线索。

它告诉你mysql期望见到一个未终止字符串的余下部分。

(你看见语句中的错误吗?

字符串"Smith丢掉了第二个引号。

走到这一步,你该做什么?

最简单的是取消命令。

然而,在这种情况下,你不能只是输入\c,因为mysql作为它正在收集的字符串的一部分来解释它!

相反,应输入关闭的引号字符(这样mysql知道你完成了字符串),然后输入\c:

mysql>SELECT*FROMmy_tableWHEREname='SmithANDage<30;

   '>'\c

mysql>

提示符回到mysql>,显示mysql准备好接受一个新命令了。

`>提示符类似于'>和">提示符,但表示你已经开始但没有结束以`>开始的识别符。

知道'>和">提示符的含义很重要,因为如果你错误地输入一个未终止的字符串,任何后面输入的行将要被mysql忽略--包括包含QUIT的行!

这可能令人相当困惑,特别是如果取消当前命令前还不知道你需要提供终止引号。

3.3. 创建并使用数据库

3.3.1.创建并选择数据库

3.3.2.创建表

3.3.3.将数据装入表中

3.3.4.从表检索信息

知道怎样输入命令,便可以访问数据库了。

假定在你的家(你的“动物园”)中有很多宠物,并且你想跟踪关于它们各种类型的信息。

你可以通过创建表来保存你的数据并根据所需要的信息装载他们,然后你可以从表中检索数据来回答关于动物不同种类的问题。

本节显示如何做到所有这些事情:

·        创建数据库

·        创建数据库表

·        装载数据到数据库表

·        以各种方法从表中检索数据

·        使用多个表

动物园数据库很简单(特意的),但是不难把它想象成可能用到类似数据库的真实世界情况。

例如,农夫可以使用这样的一个数据库来追踪家畜,或者兽医可以用它跟踪病畜记录。

从MySQL网址上可以获得后面章节中将用到的含有部分查询和样例数据的动物园分发。

有tar压缩格式((

使用SHOW语句找出服务器上当前存在什么数据库:

mysql>SHOWDATABASES;

+----------+

|Database|

+----------+

|mysql   |

|test    |

|tmp     |

+----------+

可能你的机器上的数据库列表是不同的,但是很可能有mysql和test数据库。

mysql是必需的,因为它描述用户访问权限,test数据库经常作为用户试身手的工作区。

请注意如果没有SHOWDATABASES权限,则不能看见所有数据库。

参见13.5.1.3节,“GRANT和REVOKE语法”。

如果test数据库存在,尝试访问它:

mysql>USEtest

Databasechanged

注意,USE,类似QUIT,不需要一个分号。

(如果你喜欢,你可以用一个分号终止这样的语句;这无碍)USE语句在使用上也有另外一个特殊的地方:

它必须在一个单行上给出。

你可列在后面的例子中使用test数据库(如果你能访问它),但是你在该数据库创建的任何东西可以被访问它的其它人删除,因此,你应该询问MySQL管理员许可你使用自己的一个数据库。

假定你想要调用你的menagerie,管理员需要执行这样一条命令:

mysql>GRANTALLONmenagerie.*TO'your_mysql_name'@'your_client_host';

这里your_mysql_name是分配给你的MySQL用户名,your_client_host是所连接的服务器所在的主机。

3.3.1. 创建并选择数据库

如果管理员在设置权限时为你创建了数据库,你可以开始使用它。

否则,你需要自己创建数据库:

mysql>CREATEDATABASEmenagerie;

在Unix下,数据库名称是区分大小写的(不像SQL关键字),因此你必须总是以menagerie访问数据库,而不能用Menagerie、MENAGERIE或其它一些变量。

对表名也是这样的。

(在Windows下,该限制不适用,尽管你必须在一个给定的查询中使用同样的大小写来引用数据库和表。

但是,由于多种原因,作为最好的惯例,一定要使用与数据库创建时的同样的大小写。

创建数据库并不表示选定并使用它,你必须明确地操作。

为了使menagerie成为当前的数据库,使用这个命令:

mysql>USEmenagerie

Databasechanged

数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。

你可以根据上面的例子执行一个USE语句来实现。

还可以在调用mysql时,通过命令行选择数据库,只需要在提供连接参数之后指定数据库名称。

例如:

shell>mysql-hhost-uuser-pmenagerie

Enterpassword:

********

注意,刚才显示的命令行中的menagerie不是你的密码。

如果你想要在命令行上在-p选项后提供密码,则不能插入空格(例如,如-pmypassword,不是-pmypassword)。

但是,不建议在命令行输入密码,因为这样会暴露密码,能被在机器上登录的其它用户窥探到。

3.3.2. 创建表

创建数据库是很容易的部分,但是在这时它是空的,正如SHOWTABLES将告诉你的:

mysql>SHOWTABLES;

Emptyset(0.00sec)

较难的部分是决定你的数据库结构应该是什么:

你需要什么数据库表,各数据库表中有什么样的列。

你将需要一个包含你每个宠物的记录的表。

它可称为pet表,并且它应该包含,最少,每个动物的名字。

因为名字本身不是很有趣,表应该包含另外的信息。

例如,如果在你豢养宠物的家庭有超过一个人,你可能想要列出每个动物的主人。

你可能也想要记录例如种类和性别的一些基本的描述信息。

年龄呢?

那可能有趣,但是存储到一个数据库中不是一件好事情。

年龄随着时间流逝而变化,这意味着你将要不断地更新你的记录。

相反,存储一个固定值例如生日比较好,那么,无论何时你需要年龄,可以以当前日期和出生日期之间的差来计算它。

MySQL提供了日期运算函数,因此这并不困难。

存储出生日期而非年龄还有其它优点:

·        你可以使用数据库完成这样的任务,例如生成即将到来的宠物生日的提示。

(如果你认为这类查询有点蠢,注意,这与从商务数据库来识别出不久要发给生日祝贺的客户是同一个问题,因为计算机帮助私人联络。

·        你可以相对于日期而不止是当前日期来计算年龄。

例如,如果你在数据库存储死亡日期,你能很容易地计算出一只宠物死时有多大。

你可能想到pet表中其它有用的其它类型信息,但是到目前为止这些已经足够了:

名字、主人、种类,性别、出生和死亡日期。

使用一个CREATETABLE语句指定你的数据库表的布局:

mysql>CREATETABLEpet(nameVARCHAR(20),ownerVARCHAR(20),

   ->speciesVARCHAR(20),sexCHAR

(1),birthDATE,deathDATE);

VARCHAR适合于name、owner和species列,因为列值是变长的。

这些列的长度不必都相同,而且不必是20。

你可以挑选从1到65535的任何长度,从中选择一个最合理的值。

(如果选择得不合适,后来证明你需要一个更长的字段,MySQL提供一个ALTERTABLE语句。

可以用多种类型的值来表示动物记录中的性别,例如,"m"和"f",或"male"和"female"。

使用单字符"m"和"f"是最简单的方法。

很显然,birth和death列应选用DATE数据类。

创建了数据库表后,SHOWTABLES应该产生一些输出:

mysql>SHOWTABLES;

+---------------------+

|Tablesinmenagerie|

+---------------------+

|pet                |

+---------------------+

为了验证你的表是按你期望的方式创建,使用一个DESCRIBE语句:

mysql>DESCRIBEpet;

+---------+-------------+------+-----+---------+-------+

|Field  |Type       |Null|Key|Default|Extra|

+---------+-------------+------+-----+---------+-------+

|name   |varchar(20)|YES |    |NULL   |      |

|owner  |varchar(20)|YES |    |NULL   |      |

|species|varchar(20)|YES |    |NULL   |      |

|sex    |char

(1)    |YES |    |NULL   |      |

|birth  |date       |YES |    |NULL   |      |

|death  |date       |YES |    |NULL   |      |

+---------+-------------+------+-----+---------+-------+

你可以随时使用DESCRIBE,例如,如果你忘记表中的列的名称或类型时。

3.3.3. 将数据装入表中

创建表后,需要填入内容。

通过LOADDATA和INSERT语句可以完成该任务。

假定你的宠物纪录描述如下。

(假定在MySQL中期望的日期格式是YYYY-MM-DD;这可能与你习惯的不同。

name

owner

species

sex

birth

death

Fluffy

Harold

cat

f

1993-02-04

 

Claws

Gwen

cat

m

1994-03-17

 

Buffy

Harold

dog

f

1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1