Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2484659
  • 博文数量: 609
  • 博客积分: 10061
  • 博客等级: 上将
  • 技术积分: 5920
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 08:30
文章分类

全部博文(609)

文章存档

2010年(13)

2009年(39)

2008年(558)

我的朋友

分类: Mysql/postgreSQL

2008-09-01 11:39:51

Mysql入门系列:与mysql交互的技巧(2)

  输入行编辑在mysql的Windows 版中不起作用,但是可从MySQLWeb 站点取得免费的cygwin_32 客户机分发包。在该分发包中的mysqlc 程序与mysql一样,但它支持输入行编辑命令。

  2. 利用拷贝和粘贴发布查询

  如果是在窗口环境下工作,可将认为有用的查询文本保存在一个文件中并利用拷贝和粘贴操作很容易地发布这些命令。其工作过程如下:

  1) 在Te l n e t窗口或DOS 控制窗口中激活mysql。

  2) 在一个文档窗口打开包含查询的文件。(如笔者在Mac OS 下使用B B E d i t,在UNIX中使用X Window System 下的xterm 窗口中的v i。)

  3) 为了执行存放在文件中的某个查询,选择并拷贝它。然后切换到Telnet 窗口或DOS 控制台,并将该查询粘贴到mysql。这个过程写起来似乎有点令人讨厌,但它是一个快速录入查询的很容易的方法,实际使用时不用键入查询。这个方法也允许在文档窗口中对查询进行编辑,而且它允许拷贝和粘贴现有查询来构造一个新的查询。例如,如果您经常从某个特定的表中选择行,但是喜欢查看以不同方式存放的输出结果,则可以在文档窗口中保存一个不同的ORDER BY 子句的列表,然后为任意的特定查询拷贝和粘贴想使用的那个子句。也可按其他方向拷贝和粘贴(从Telnet 到查询文件)。在mysql中录入行时,它们被保存在您的主目录中的名为.mysql_history 的文件中。如果您手工录入了一个希望保存起来今后使用的查询,可退出mysql,在某个编辑器中打开. mysql_ h i s t o r y,然后从.mysql_history 拷贝和粘贴此查询到您的查询文件。

  3. 以批方式运行mysql不一定必须交互式地运行mysql。mysql能够以非交互式(批)方式从某个文件中读取输入。这对于定期运行的查询是很有用的,因为您一定不希望每次运行此查询时都要重新键入它。只要一次性地将其放入一个文件,然后让mysql在需要时执行该文件的内容即可。假定有一个查询查找 member 表的interests 列,以找出那些对美国历史的某个方面感兴趣的历史同盟会员。如查找对大萧条期有兴趣的会员,可编写此查询如下(注意结尾处有一个分号,从而mysql能够知道查询语句在何处结束):

  为了使用此查询来找出对Thomas Jefferson 感兴趣的会员,可以编辑此查询文件将depression 更改为Je fferson 并再次运行mysql。只要不很经常使用此查询,它工作得很好。如果经常使用,则需要更好的方法。使用此查询更为灵活的一种方法是将其放入一个外壳程序脚 本中,此脚本从脚本命令行取一个参数并利用它来更改查询的文本。这样确定查询的参数,使得能够在运行脚本时指定令人感兴趣的关键字。为了了解这如何起作 用,按如下编写一个较小的外壳程序脚本i n ter e s t s . s h:


  其中第二行保证在命令行上有一个关键字;它显示一条简短的消息,或者退出。在< < Q U E RY_INPUT 和最后的Q U E RY_INPUT 之间的所有内容成为mysql的输入。在查询文本中,外壳程序用来自命令行的关键字替换$ 1。(在外壳程序脚本中, $ 1、$ 2 . . .为命令参数。)这使相应的查询反映了执行此脚本时在命令行上指定的关键字。在能够运行此脚本前,必须使其可执行:


  现在不需要在每次运行脚本时对其进行编辑了。只要在命令行上告诉它需要查找什么就行了。如下所示:


  4. 利用现有数据来创建新记录

  可以用INSERT 语句每次一行地将新记录追加到表中,但是在通过手工键入INSERT 语句建立几个新记录后,多数人都会意识到应该有更好的追加记录的方法。一种选择是利用仅含有数据值的文件,然后利用LOAD DATA 语句或mysqlimport 实用程序从该文件中装入记录。通常,可利用已经以某种格式存在的数据来建立数据文件。这些数据信息可能包含在电子表中,或许在某个其他数据库中,应该将它 们转换到MySQL。为了介绍起来简单,我们假定这些数据是在桌面微计算机的电子表中。要将电子表数据从桌面微计算机中转换到您的UNIX 账号下的某个文件中,可结合Telnet 利用拷贝和粘贴。具体工作如下所示:1) 打开UNIX 账号的一个Telnet 连接。在Mac OS 下,可利用诸如Better Telnet 或N CSA Telnet 这样的应用程序。在Windows 下,可使用标准的Telnet 程序。

  2) 打开电子表,选择想转换的数据块,拷贝它。

  3) 在Telnet 窗中,键入下列命令开始获取数据到文件data.txt。



  cat 命令等待输入。

   4) 将从电子表拷贝来的数据粘贴到Telnet 窗口。cat 认为您正在键入信息并忠实地将它写入到data.txt 文件。

   5) 在所有粘贴数据已经写入该文件后,如果光标停止在数据行的结尾处而不是停止在新行的开始,按Enter。然后,按Ctrl-D 以指示“文件结束”。cat 停止输入等待并关闭data.txt文件。现在已经得到了包含有电子表中选择的数据块的data.txt 文件,此文件已作好由LOAD DATA mysqlimport 加载到数据库的准备。

  拷贝和粘贴是一种将数据传入UNIX 文件的快速且简易的方法,但它最适合较小的数据集。量较大的数据可能会超出系统拷贝缓冲区。在这样的情况下,最好是以无格式文本(制表符分隔)的形式保存 电子表。然后可利用FTP 将相应文件从微机上传送到UNIX 账号。转换文本模式(非二进制或影像模式)的文件以便行结束符转换为UNIX 的行结束符。(UNIX利用换行符、Mac OS 利用回车换行符、Windows 利用回车换行符/换行符对作为行结束符。)可告诉LOAD DATA 或mysqlimport 寻找什么换行符,但是在UNIX 下,对含换行符的文件处理要更容易一些。

  在转换了文件之后,应 该检查一下在结尾处是否具空白行。如果有,应该将它们删除,否则在将该文件装载到数据库时,这些空白行将会转换为空白或畸形的记录。来自电子表格以无格式 文本保存的文件,或具有能括住包含空格的值的括号。为了在将该文件装入数据库时去掉这些括号,可利用LOAD DATA 的FIELDS ENCLOSEDBY 子句,或利用mysqlimport 的--fields - enclosed - by 选项。更详细的信息请参看附录D 中LOAD DATA 的相应项。

  1.6 向何处去

  现在我们已经介绍了许多使用MySQL的知识。您已经知道了怎样设置数据库并创建表。能够将记录放入这些表 中,并以各种方式对其进行检索,更改或删除。但是要掌握MySQL仍然有许多知识要学,本章中的教程仅仅给出了一些浅显的东西。通过考察我们的样例数据库 就会明白这一点。我们创建了样例数据库及其表,并用一些初始的数据对其进行了填充。在这个工作过程中,我们明白了怎样编写查询,回答关于数据库中信息的某 些问题,但是还有许多工作要做。

 例如,我们没有方便的交互方式来输入学分保 存方案的新学分记录,或输入历史同盟地址名录的会员条目。还没有方便的方法来编辑现有记录,而且我们仍然不能生成印刷或联机形式的同盟地址名录。这些任务 以及一些其他的任务将在以后的各章中陆续地进行介绍,特别是在第7章“Perl DBI API”和第8 章“PHP API”中将要进行详细地介绍。

  下一步将阅读本书中哪部分取决于您对什么内容感兴趣。如果希望了解怎样完成已经以

  历史同盟和学分保存方案开始的工作,可看第一部分有关MySQL程序设计的内容。如果打算成为某个站点的MySQL管理员,本书的第三部分将对管理工作做较多的介绍。但是,笔者建议通过阅读第一部分中的其余各章,首先获得使用MySQL的一般背景知识。

  这些章节讨论了MySQL怎样处理数据,进一步提供有关语法和查询语句的用途,并且说明了怎样使查询运行得更快。不管您在什么环境中使用MySQL,不管是运行mysql还是编写自己的程序,

  还是作为数据库管理员,用这些内容打下一个良好的基础将有助于您站在一个较高的起点上。

阅读(936) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~