免费好用的编程开发工具
MySQL教程(官方推荐) --很经典的教程 本节提供一个教程,帮助熟悉MySQL。在完成这个教程时,将创建一个样例数据库和这个数据库中的表,然后增加、检索、删除和修改信息与数据库进行交互。此外,在操作这个样例数据库的过程中,将能学到下列东西: ■ 如何利用mysql客户机程序与MySQL通信。 ■ SQL 语言的基本语句。(如果您曾经使用过其他RDBMS,从而熟悉SQL,那么浏览一下这个教程,看看SQL 的MySQL版与您熟悉的版本有何差别也是很好的。)正如上一节所述, MySQL采用客户机/服务器体系结构,其中服务器运行在存放数据库的机器上,而客户机通过网络连接到服务器。这个教程主要基于mysql客户机的应用。mysql读取您的SQL 查询,将它们发送给服务器,并显示结果。mysql运行在MySQL所支持的所有平台上,并提供与服务器交互的最直接的手段,因此,它首先是一个逻辑上的客户机。 在本书中,我们将用samp_db 作为样例数据库的名称。但是有可能在您完成本例子的过程中需要使用另一个数据库名。因为可能在您的系统上已经有某个人使用了samp_db 这个名称,或者管理员给您指定了另一个数据库名称。在后面的例子中,无论是哪种情况,都用数据库的实际名称代替samp_db。表名可以像例子所显示的那样精确地使用,即使系统中的多个人都具有他们自己的样例数据库也是如此。顺便说一下,在MySQL中,如果有人使用了相同的表名也没什么关系。一旦各个用户都具有自己的数据库, MySQL将一直保留这些数据库名,防止各用户互相干扰。 1.4.1基本要求 为了试验这个教程中的例子,必须安装MySQL。特别是必须具有对MySQL客户机和某个MySQL服务器的访问权。相应的客户机程序必须位于您的机器上。至少需要有mysql程序,最好还有mysqlimport程序。服务器也可以位于您的机器上,尽管这不是必须的。实际上,只要允许连接到服务器,那么服务器位于何位置都没有关系。若服务器正巧运行在您的机器上,适当的客户机程序又已经安装,那么就可以开始试验了。如果您尚需设法搞到MySQL,可参阅附录A“获得和安装软件”的说明。如果您正自己安装MySQL,可参阅这一章,或把它给管理员看。如果网络访问是通过一个因特网服务商(ISP)进行的,那么可查看该服务商是否拥有MySQL。如果该ISP 不提供MySQL服务,可查看附录J“因特网服务商”以得到某些选择更适合的服务商的建议。 除MySQL软件外,还需要得到创建样例数据库及其表的权限。如果您没有这种权限,可以向MySQL管理员咨询。管理员可通过运行mysql并发布如下的命令提供这种权限: MySQL与mysql的区别 为了避免混淆,应该说明,“MySQL”指的是整个MySQLRDBMS,而“mysql”代表的是一个特定的客户机程序名。它们的发音都是相同的,但可通过不同的大小写字符和字体来区分。关于发音,MySQL的发音为“my-ess-queue-ell”。我们知道这是因为MySQL参考指南中是这样发音的。而SQL 的发音为“sequel”或“ess-queue-ell”。我不认为哪个发音更好一些。愿意读哪个音都可以,不过在您对别人读的时候,他可能会用他认为是“正确”的发音对您进行纠正。 前一个命令在paul 从localhost(服务器运行在正运行的同一主机)连接时,允许它完全访问samp_db 数据库及它的所有表。它还给出了一个口令secret。第二个命令与第一个类似,但允许paul 从任何主机上连接(“%”为通配符)。也可以用特定的主机名取代“%”,使paul只能从该主机上进行连接。(如果您的服务器允许从localhost 匿名访问,由于服务器搜索授权表查输入连接匹配的方式的原因,这样一个GRANT 语句可能是必须的。)关于GRANT语句以及设置MySQL用户账号的更详细信息,可在第11章“常规的MySQL管理”到。 1.4.2 取得样例数据库的分发包 这个教程在某些地方要涉及来自“样例数据库分发包”中的文件。有的文件含有帮助来设置样例数据库的查询或数据。为了得到这个分发包,可参阅附录Anginx服务器有哪些常用功能。在打开这个分发包时,将创建一个名为samp_db 的目录,此目录中含有所需的文件。无论您在哪个地方试验与样例数据库有关的例子,建议都移入该目录。 1.4.3 建立和中止与服务器的连接 为了连接到服务器,从外壳程序(即从UNIX 提示符,或从Windows 下的DOS 控制台)激活mysql程序。命令如下: 其中的“%”在本书中代表外壳程序提示符。这是UNIX 标准提示符之一;另一个为“$”。在Windows 下,提示符类似“c:\>”。 mysql命令行的options 部分可能是空的,但更可能的是发布一条类似如下的命令: 在激活mysql时,有可能不必提供所有这些选项;确切使用的命令请咨询MySQL管理员。此外,可能还需要至少指定一个名称和一个口令。 在刚开始学习MySQL时,大概会为其安全系统而烦恼,因为它使您难于做自己想做的事。(您必须取得创建和访问数据库的权限,任何时候连接到数据库都必须给出自己的名字和口令。)但是,在您通过数据库录入和使用自己的记录后,看法就会马上改变了。这时您会很欣赏MySQL阻止了其他人窥视(或者更恶劣一些,破坏!)您的资料。 下面介绍选项的含义: ■ -hhost_name(可选择形式:--host=host_name) 希望连接的服务器主机。如果此服务器运行在与mysql相同的机器上,这个选项一般可 省略。 ■ -uuser_name(可选择的形式:--uuser=user_name)您的MySQL用户名。如果使用UNIX 且您的MySQL用户名与注册名相同,则可以省去这个选项;mysql将使用您的注册名作为您的MySQL名。在Windows 下,缺省的用户名为ODBC。这可能不一定非常有用。可在命令行上指定一个名字,也可以通过设置USER 变量在环境变量中设置一个缺省名。如用下列set 命令指定paul 的一个用户名: ■ - p(可选择的形式:--password) 这个选项告诉mysql提示键入您的MySQL口令。注意:可用-pyour_password 的形式(可选择的形式: --password =your_password)在命令行上键入您的口令。但是,出于安全的考虑,最好不要这样做。选择-p 不跟口令告诉mysql在启动时提示您键入口令。例如: 在看到Enter password: 时,键入口令即可。(口令不会显到屏幕,以免给别人看到。)请注意,MySQL口令不一定必须与UNIX 或Windows 口令相同。如果完全省略了-p 选项,mysql就认为您不需要口令,不作提示。请注意: -h 和-u选项与跟在它们后面的词有关,无论选项和后跟的词之间是否有空格。而-p 却不是这样,如果在命令行上给出口令, -p 和口令之间一定不加空格。例如,假定我的MySQL用户名和口令分别为paul 和secret,希望连接到在我注册的同一机器上运行的服务器上。下面的mysql命令能完成这项工作: 在我键入命令后, mysql显示Enter password: 提示键入口令。然后我键入口令( * * * * * *表明我键入了secret)。如果一切顺利的话, mysql显示一串消息和一个“ mysql>”提示,表示它正等待我发布查询。完整的启动序列如下所示: 为了连接到在其他某个机器上运行的服务器,需要用-h 指定主机名。如果该主机为pit-viper.snake,则相应的命令如下所示: 在后面的说明mysql命令行的多数例子中,为简单起见,我们打算省去- h、-u和-p 选项。并且假定您将会提供任何所需的选项。 有很多设置账号的方法,从而不必在每次运行mysql时都在连接参数中进行键入。这个问题在1. 5节“与mysql交互的技巧”中介绍。您可能会希望现在就跳到该节,以便到一些更易于连接到服务器的办法。 在建立了服务器的一个连接后,可在任何时候键入下列命令来结束会话: 还可以键入Control-D 来退出,至少在UNIX 上可以这样。 1.4.4 发布查询 在连接到服务器后,就可以发布查询了。本节介绍有关与mysql交互应该了解的一些知识。为了在mysql中输入一个查询,只需键入它即可。在查询的结尾处,键入一个分号(“;”)并按Enter 键。分号告诉mysql该查询是完整的。(如果您喜欢键入两个字符的话,也可以使用“\ g”终止查询。)在键入一个查询之后, mysql将其发送到服务器上。该服务器处理此查询并将结果送回mysql,mysql将此结果显示出来。下面是一个简单的查询例子和结果: 它给出当前的日期和时间。(NOW() 函数本身并无多大用处,但可将其用于表达式中。如比较当前日期和其他日期的差异。) mysql还在结果中显示行数计数。本书在例子中一般不给出这个计数。因为picc编译器下载mysql需要见到分号才发送查询到服务器,所以在单一的行上不需要键入分号。如果有必要,可将一个查询分为几行,如下所示: 请注意,在键入查询的第一行后,提示符从‘mysql’ 变成了‘- >’;这表示mysql允许继续键入这个查询。这是一个重要的提示,因为如果在查询的末尾忘记了分号,此提示将有助于提醒您查询尚不完整。否则您会一直等下去,心里纳闷为什么mysql执行查询为什么这么长的时间还没完;而mysql也搞不清为什么结束查询的键入要花您那么多的时间! 异步发电机的特点 大部分情况下,用大写字符、小写字符或大小写字符混合键入查询没什么关系。下列查询全是等价的: 本书中的例子用大写字符表示SQL 关键字和函数名,用小写字符表示数据库、表和列名。 如果在查询中调用一个函数,在函数名和后跟的圆括号中间不允许有空格,例: 这两个查询看上去差别不大,但第二个失败了,因为圆括号并没有紧跟在函数名的后面。如果已经开始键入一个多行的查询,而又不想立即执行它,可键入‘\ c’ 来跳过(放弃)它,如: 请注意,提示符又变回了‘mysql>’,这表示mysql为键入的新查询作好了准备。可将查询存储在一个文件中并告诉mysql从文件中读取查询而不是等待键盘输入。可利用外壳程序键入重定向实用程序来完成这项工作。例如,如果在文件my_file.sql 中存放有查 询,可如下执行这些查询: 可用这种办法调用任何所需的文件。这里用后缀为“.sql”来表示该文件含有SQL 语句。执行mysql的这种方法将在输入数据到samp_db 数据库时的“增加新记录”中使用。为了装载一个表,让mysql从某个文件中读取INSERT 语句比每次用手工键入这些语句更为方便。 本教程的其余部分向您提供了许多可以自己试试的查询。这些查询以‘mysql>’ 提示为前导后跟结束分号,这些例子通常都给出了查询输出结果。可以按给出的形式键入这些查询,所得到的结果应该与自学材料中的相同。给出的查询中无提示符的或无分号语句结束符的只是用来说明某个要点,不用执行它们。(如果愿意您可以试一下,但如果试的话,请记住给语句末尾加一个分号。)本书后面的章节中,我们一般不给出‘mysql>’ 提示或SQL 语句的分号。这样做的原因是为了可以在非mysql客户机程序的语言环境(如在Perl 脚本中或PHP 脚本中)中发布查询,在这些语言环境中,既无提示符也不需要分号。在专门针对mysql输入一个查询的场合会作出相应的说明。 1.4.5 创建数据库 现在开始创建samp_db 样例数据库及其表,填充这些表并对包含在这些表中的数据进行一些简单的查询。 使用数据库涉及几个步骤: 1) 创建(初始化)数据库。 2) 创建数据库中的表。 3) 对表进行数据插入、检索、修改或删除。 检索现有数据是对数据库执行的最简单且常见的操作。另外几个最简单且常见的操作是插入新数据、更新或删除现有数据。较少使用的操作是创建表的操作,而最不常用的操作是创建数据库。 我们将从头开始,先创建数据库,再插入数据,然后对数据进行检索。为了创建一个新的数据库,用mysql连接到数据库然后发布CREATE DATABASE 语句,此语句指定了数据库名: 在创建表以及对这些表进行各种操作之前,必须先创建samp_db 数据库。创建数据库后,这个新创建的数据库并不是当前数据库。这可从执行下面的查询看出: 为了使samp_db 成为当前数据库,发布USE 语句即可: USE 为少数几个不需要终结符的语句之一,当然,加上终结符也不会出错。HELP 是另一个不需要终结符的语句。如果想了解不需要终结符的语句有哪些,可发布HELP 语句。在发布了USE 语句后,samp_db 成为缺省数据库: 使数据库成为当前数据库的另一个方法是在激活mysql时在命令行上指定它,如下所示: 事实上,这是一个命名要使用的数据库的方法。如果需要连接参数可在数据库名前指定。例如,下列两个命令使我们能连接到在本地主机和p i t - v i per.snake 上的samp_db 数据库上: 除非另有指定,否则后面的例子都假定在激活mysql时,在命令行上给出samp_db 使其成为当前数据库。如果激活数据库时忘了在命令行上指定数据库,只需发布USE samp_db 语句即可。 1.4.6 创建表 本节中,我们将创建样例数据库samp_db 所需的表。我们首先考虑美国历史同盟需要的表。然后再考虑学分保存方案所需的表。在某些数据库的书籍中,在这里要大讲分析与设计、实体—关系图、标准程序以及诸如此类的东西。这里确实也可以讲这些东西,但是我宁可只讲点实用的东西,比方说,我们的数据库应该是怎样的:数据库中将包含什么内容,每个表中有哪些数据以及由决定如何表示数据而带来的一些问题。这里所作出的关于数据表示的选择并不是绝对的。在其他场合下,可能会选择不同的方式来表示类似的数据,这取决于应用的需要以及打算将数据派何用途。 1. 美国历史同盟所需的表 美国历史同盟的表设计相当简单: ■ 总统( p r e s i d e n t )表。此表含有描述每位总统的记录。同盟站点上的联机测验要使用这个表。 ■ 会员( member )表。此表用来维护同盟每个会员的当前信息。这些信息将用来建立会员地址名录的书面和联机版本、发送会员资格更新提示等等。 (1) president表 president 表很简单,因此我们先讨论它。这个表将包含每位美国总统的一些基本信息: ■ 姓名。姓名在一个表中可用几种方式表示。如,可以用一个单一的列来存放完整的姓名,或者用分开的列来分别容纳名和姓。当然用单一的列更为简单,但是在使用上会带来一些限制,如: ■ 如果先输入只有名的姓名,则不可能对姓进行排序。 ■ 如果先输入只有姓的姓名,就不可能对具有名的姓名进行显示。 ■ 难以对姓名进行搜索。例如,如果要搜索某个特定的姓,则必须使用一个特定的模式,并且查与这个模式匹配的姓名。这样较之只查姓效率更低和更慢。member 表将使用单独的名和姓的列以避免这些限制。名列还存放中名(注:西方国家的姓名一般将名放在前,姓放在后,而且除了有名和姓外,有时还有中名,这是在位置上介于名和姓之间的中间名字)或首字母。这样应该不会削弱我们可能进行的任何一种排序,因为一般不可能对中名进行排序(或者甚至不会对名进行排序)。姓名即可以“ Bush, George W. ”格式显示,也可以“G e o rge W. B us h”格式显示。还有一种稍显复杂一点的情形。一个总统( Jimmy Carter)在其姓名的末尾处有一 个“ J r. ”,这时怎样做?根据名字打印的格式,这个总统的姓名显示为“ J a m e s E . C a r ter, J r.”或“C a r ter, James E., Jr.”,“J r.”与名和姓都没有关系,因此我们将建另外一个字段来存放姓名的后缀。这表明在试图确定怎样表示数据时,即使一个特殊的值也可能会带来问题。它也表明,为什么在将数据放入数据库前,尽量对数据值的类型进行了解是一个很好的想法。如果对数据了解不够,那么有可能在已经开始使用一个表后,不得不更改该表的结构。这不一定是个灾难,但通常应该避免。 ■ 出生地(城市和州)。就像姓名一样,出生地也可以用单个列或多个列来表示。使用单列更为简单些,但正如姓名中的情形一样,独立的多个列使我们可以完成用单个列不方便完成的事情。例如,如果城市和州分别给出,查各位总统出生在哪个州的记录就会更容易一些。 ■ 出生日期和死亡日期。这里,唯一特殊的问题是我们不能要求都填上死亡日期,因为有的总统现在还健在。MySQL提供了一个特殊的值NULL,表示“无值”,可将其用在死亡日期列中以表示“仍然健在”。 (2) member 表 存储历史同盟会员清单的member 表在每个记录都包含单个人员的基本描述信息这一点上,类似于president 表。但是每个member 的记录所含的列更多,member 表的各列如下: ■ 姓名。使用如president 表一样的三个列来表示:姓、名(如果可能的话还有中名)、后缀。 ■ ID 号。这是开始记录会员时赋给每个会员的唯一值。以前同盟未用ID 号,但现在的记录做得更有系统性,所以最好开始使用ID 号。(我希望您到有利于使用MySQL并考虑到其他的将它用于历史同盟记录的方法。使用数字,将member 表中的记录与其他与会员有关的表中的记录相关联要更容易一些。) ■ 截止日期。会员必须定期更新他们的会员资格以免作废。对于某些应用,可能会用到最近更新的日期,但是近更新日期不适合于历史同盟。会员资格可在可变的年数内(一般为一年、二年、三年或五年)更新,而最近更新的日期将不能表示下一次更新必须在何时进行。此外,历史同盟还允许有终生会员。我们可以用未来一个很长的日期来表示终生会员,但是用NULL 似乎更为合适,因为“无值”在逻辑上对应于“永不终止”。 ■ 地址。对于有地址的会员,这将使他们能很容易地进行相互之间的通信。作为历史同盟秘书,这使您能电子化地发送更新通知给会员,而用不着发邮政信函。这比到邮局发送信函更容易,而且也不贵。还可以用给会员发送他们的地址名录条目的当前内容,并要求他们在有必要时更新信息。 ■ 邮政地址。这是与没有(或没有返回信息)的会员联络所需要的。将分别使用街道地址、城市、州和Zip 号。街道地址列又可以用于有诸如P.O. Box 123 而不是123 Elm St. 的会员的信箱号。我们假定所有同盟会员全都住在美国。当然,对于具有国际会员的机构,此假设过于简化了。如果希望处理多个国家的地址,还需要对不同国家的地址格式作一些工作。例如,这里的Zip 号就不是一个国际标准,有的国家有省而不是州。 ■ 电话号码。与地址字段一样,这个列对于联络会员也是很有用的。 ■ 特殊爱好的关键词。假定每个会员一般都对美国历史都有兴趣,但可能有的会员对某些领域有特殊的兴趣。此列记录了这些特殊的兴趣。会员可以利用这个信息来到其他具有类似兴趣的会员。 (3) 创建表 现在我们已经作好了创建历史同盟表的准备。我们用CREATE TABLE 语句来完成这项工作,其一般格式如下:
| |||||
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论