当前位置:Linux教程 - Linux - 网络数据库教程-第三天

网络数据库教程-第三天



         一、第三天

    网络数据库是一个很大的课题,用一个5天的教程不可能谈到所有的内容。我为你教授基础的知识,剩下的就要靠你自己在实践中体会和学习。

    在本教程中我们只有时间讲解于网络数据库有关的设置问题。

    Apache

    Apache网络服务器 是一项性能相当不错的软件。简单地说,它的目的就是让用户能从你的计算机中请求网络信息。通常这些信息是HTML网页和图象(GIF和JPEG图象),但是现代的网络服务器都支持CGI (网络编程)。

    这是Apache简单版本的功能。对于特定的应用,你需要对其进行设置,让其真正发挥功能。

    Apache的功能实际上非常强大,你可以对其进行多种设置,执行多种功能。但现在我们只能讲解有关网络数据库的设置。今天所讲的需要和Apache其他的文献或我们在这里使用的软件包一起应用。


    二、常规的Apache设置

    进行常规Apache设置:

     

    选择DocumentRoot子目录
    ePerl
    mod_perl
    DocumentRoot概念比较容易理解。假设我们设立了域www.example.com。而URL可能如下所示:

    http://www.example.com/webmonkey/day3.html
    我喜欢将我的DocumentRoot设置为/web/docs/,这样以来,相对应于该URL的文件将是/web/docs/webmonkey/day3.html.

    假设你按照我昨天的课程中的建议安装了Apache,则你需要编辑/usr/src/apache_1.2.6/conf/srm.conf将DocumentRoot设置为/web/docs。 (编辑方法很简单,你一看就知道该怎么做。你还需要相应改变/usr/src/apache_1.2.6/conf/access.conf. (也不难)。在Unix提示符下,注意一定要实际建立该DocumentRoot子目录:

    mkdir /web; mkdir /web/docs
    Perl和ePerl (将是明天的主要课程内容),和mod_perl一起就可建立起世界一流的数据库支持下的网站。缩头的课程中我建议你们使用了mod_perl的自动Apache创立功能,所以现在你应该有了这样一个文件 /usr/src/apache_1.2.6/src/httpd。

    接下来,你应该:

    第1步:建立/usr/src/apache_1.2.6/src/httpd和/usr/sbin/httpd之间的标志性链接。
    建立标志性链接的意义是:你的Linux操作系统希望httpd放置在/usr/sbin子目录中,但是以后对httpd的任何重新的设置将把它该在/usr/src/apache_1.2.6/src下。整个特点使你无需每次将httpd拷贝到/usr/sbin下。
    cd /usr/sbin

    ln -s /usr/src/apache_1.2.6/src/httpd httpd
    第2步:检查确保拟定设置中包括了mod_perl。
    现在我们做一个快速检查,键入以下指令:
    /usr/sbin/httpd -v
    屏幕将显示一条短信息:

    Server version Apache/1.2.6 mod_perl/1.08.
    第3步”设置你的/etc/rc.d/rc.M文件。
    该文件和DOS的自动批处理文件(autoexec.bat)类似。它在你的Linux服务器启动时运行。确保使所有必要的重新都被初始化并在boot时能够正常运行。如果你的rc.M文件中没有以下设置,你应该加入:
    # Start Web server:

    if [ -x /etc/rc.d/rc.httpd ]; then

    . /etc/rc.d/rc.httpd

    fi
    这些代码意思是说:Linux的启动过程将激活文件/etc/rc.d/rc.httpd的内容 (以启动你的httpd)。这时,屏幕应显示:

    echo httpd

    /usr/sbin/httpd -f /usr/src/apache_1.2.6/conf/httpd.conf &
    或许你还没有整个文件,所以你需要生成该文件

    第4步:使Apache能够处理CGI和ePerl文件。
    现在你需要进行大量细节的设置。回到/usr/src/apache_1.2.6/conf子目录,然后:
    在access.conf中,确保以加重字体(bold)加入下列文字:



    Options Indexes FollowSymLinks ExecCGI

    AllowOverride None

    order allow,deny

    allow from all


    现在,修改srm.conf:

    DirectoryIndex index.iphtml index.cgi index.html
    你还需要\"uncomment\" 某行,所以最后的设置为:

    AddHandler cgi-script .cgi
    在httpd.conf中,, 在区域之上加入以下文字:

    Perlrequire /web/docs/startup.perl



    PerlModule Apache::ePerl



    SetHandler perl-script

    PerlHandler Apache::ePerl


    现在你的/web/docs子目录下需要一个startup.perl文件,你可以拷贝我的:

    #!/usr/bin/perl

    use strict;

    use Apache::Registry;

    use CGI;

    use DBI ();

    1;
     

    缺省情况下,除了你指定的/cgi-bin/子目录之外,Apache不会允许CGI程序在任何其他子目录中运行,如果安全性是你的首要考虑,这一条很重要。但由于现在我们谈的是网络数据库编程,所以在第4步中的设置让Apache运行CGI程序在其他子目录中也能运行。

    我们还告诉Apache遇到带有特殊后缀.iphtml的文件时应该怎么做。这种文件叫做内部剖析后的HTML文件。现在Apache知道应该将这种文件转交ePerl进行进一步的处理。最后。我们告诉Apache在服务器初始化之后立即运行文件startup.perl。该文件把几个非常有用的模块载入服务器内存,重要之后的程序需要使用这些模块时就 无需重新载入它们。

     

    三、MySQL和整个数据库/服务器系统

    在第1天的教程中,我了解了数据库服务器常驻内存并可以回应请求、存储数据、提供管理界面确保数据只能在授权范围内被处理。现在我们将使用MySQL来实践这些概念。

     

    建立好你的MySQL后,你需要进行的设置比起对Apache的设置就少多了。执行完完整的MySQL安装过程(包括运行/usr/local/src/mysql-VERSION/scripts/mysql_install_db)后,还有一项工作需要执行:将其设置为常驻内存的守护程序。这个过程和我们对httpd的做法相同。编辑/etc/rc.d/rc.M 文件使其包括以下代码:

    # Start mysql database server:

    if [ -x /etc/rc.d/rc.mysql ]; then

    . /etc/rc.d/rc.mysql

    fi
    生成相应的rc.mysql文件。非常简单:

    /usr/local/bin/mysql.server start
    当我使用MySQL时,我经常使用这两个程序:/usr/local/bin/mysql和/usr/local/bin/mysqlshow。你不需要键入所有这些内容,- mysql和mysqlshow就能够正常工作,因为/usr/local/bin是指令路径的环境变量的一部分。

    让我们试一下:

    rdice:# mysqlshow

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

    | Databases |

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

    | mysql |

    | test |

    +-----------+
    这就是你应该看到的(假设你已经正确安装了Perl和Data::ShowTable)。这项输出项我们显示了:MySQL在最高级别上将数据安排到数据库中。上述两个显示由MySQL自动生成,每一项都有特殊用途:mysql被MySQL自己使用来生成程序自己的内部设置,test作为某种暂存区供所有用户使用,但是它没有任何安全防护机权限设置。也就是说,不要将任何重要信息放在test暂存区内。

    我们再来一遍。但是这次我们将欲求mysqlshow告诉我test数据库中的内容:

    rdice:# mysqlshow test

    Database: test

    +--------+

    | Tables |

    +--------+

    +--------+
    表格(Tables)是数据库中的下一级。你可以将表格想象为电子工作表:列(columns)代表数据域,而行(rows)则代表单个的记录。

    从屏幕输出中我们可以看到test数据库是空的。我们将配合使用 mysql程序和MySQL并在数据库中放入具体的内容。

    四、MySQL, SQL, DDL,和DML

    同MySQL的互动交流指的是用它的语言SQL(结构化程序语言)。SQL一般划分为两部分,第1部分叫做DDL,即数据定义语言(data definition language),你用SQL这个单元告诉MySQL如何设立表格。还有一部分是DML,即数据控制语言( data manipulation language),这个单元用于从你的表格中获取数据。

    这里是计划:我将启动mysql,生成一个表格,然后在表格中输入数据,然后检查我刚输入的数据。(我用加重体显示的文字解释各项指令的含义)

    rdice:# mysql test

    Welcome to the MySQL monitor. Commands end with ; or \\g.

    Your MySQL connection id is 4 to server version:
    3.21.28-gamma-log



    Type \help\ for help.



    mysql> create table albums ( 这里我在使用DDL
    -> title varchar(100), 设置表格,在表格中
    -> artist varchar(100), 我将存储一些
    -> released date); 音乐资料

    Query OK, 0 rows affected (0.07 sec)



    现在是DML,用于告诉MyDQL在album中加入记录

    mysql> insert into albums(title,artist,released)

    -> values(\Selling England By The Pound\,\Genesis\,\
    1973-01-01\);

    Query OK, 1 row affected (0.08 sec)



    这里是DML声明,它将使我看到我刚才加入的内容
    注意*在SQL语言中指“所有列”
    mysql> select * from albums;

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

    | title | artist | released |

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

    | Selling England By The Pound | Genesis | 1973-01-01 |

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

    1 row in set (0.06 sec)
     

    MySQL所认可的所有SQL的语法在MySQL文献中都有详细说明,你随时可以查阅。即使今天的课程也已经涉及了许多进出知识,所以你应该仔细研究一下它。

    生成表格的级别语法是:

    create table 表格名 (

    列1 列1数据类型,

    列2 列2数据类型,

    ...

    列_x 列_x数据类型

    )
    各列可以使用的数据类型可以在MySQL文献中找到。在本例中我使用了\"date\"数据类型以及变量长度字符串。\"varchar\" 字符串的长度由预设的长度限制,在变量中,是100。

    要结束mysql中的一个声明,你需要键入一个分号,然后回车。mysql将告诉你的“query(SQL中任何指令的术语)”状态,以及处理所用时间。

    insert(插入)的语言更简单:

    insert into 表格(列1,列2,...,列_x)

    values(value1,value2,...,value_x)
    字符串必须用引号圈起来。

    select(选择)是SQL非常有用的声明,必要的时候,它的用法可能会非常复杂。

    如果在该数据库中我存储了几百个音乐文件,而且我只想看一下有Genesis创作的作品,我就可以用select发出一个声明查询我所需要的内容:

    select title, released

    from albums

    where artist = \Genesis\

    order by released
    这次我按名称圈定了我所感兴趣的列,而不是用* 通配符。命令行where artist = \Genesis\限制必须查询MySQL记录中由Genesis创作的作品,我还命令MySQL将该作曲家的唱片按照发行日期排序。

    除了insert和select指令,还有两种基本的DML指令:update(更新)和delete(删除)。 update使你能够改变在表格行中存储的数据;delete使你能删除表格中的一行。

    这些指令的使用范例:

    我发现Selling England 的发行日期是2月1日而不是1月1日。所以我更新
    我的记录:

    mysql> update albums

    -> set released = \1973-02-01\

    -> where title = \Selling England by the Pound\

    -> and artist = \Genesis\;

    Query OK, 1 row affected (0.03 sec)



    mysql> select * from albums;

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

    | title | artist | released |

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

    | Selling England by the Pound | Genesis | 1973-02-01 |

    | Wind & Wuthering | Genesis | 1976-01-01 |

    | We Can\t Dance | Genesis | 1991-01-01 |

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

    3 rows in set (0.00 sec)



    如果我认为我不喜欢Genesis ...

    mysql> delete from albums where artist = \Genesis\;

    Query OK, 3 rows affected (0.00 sec)



    mysql> select * from albums;

    Empty set (0.00 sec)
    使用\"update\" 和\"delete\" 指令时,你需要用where指明查询条件(否则你的表格中的每一行都会被修改或删除,你必须小心)

    互联网中有一个很好的SQL教程,我建议仔细阅读该教程。它并不完全适用于MySQL,这是因为SQL也有不同的“方言”。该教程所讲的内容基本适用于MySQL,但有一些细微的区别,在MySQL的SQL文献中有具体说明。

    今天的课程的最后,我们将再次研究一下mysqlshow:

    rdice:# mysqlshow test

    Database: test

    +--------+

    | Tables |

    +--------+

    | albums |

    +--------+

    rdice:# mysqlshow test albums

    Database: test Table: albums Rows: 0

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

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

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

    | title | varchar(100) | YES | | | |

    | artist | varchar(100) | YES | | | |

    | released | date | YES | | | |

    +----------+--------------+------+-----+---------+-------+
    mysqlshow记录了我们在mysql中所作的一切工作。当你要求mysqlshow显示表格信息时,它并不告诉你在表格中具体有什么信息,它只是告诉你表格中目前有多少行,它告诉你的是表格的结构。我们已经了解了\"Field\"和\"Type\" ,其他的表格资料年可以从MySQL的文献中找到详细内容)。

    五、我们不是在建立互联网站点吗,我是不是漏了什么东西?

    我们现在已经了解了数据库的基本知识。下面我们的任务是将这些SQL技术应用到互联网中。我们将用DBI(Perl的数据库界面)实现这一目的。我将SQL语言直接写入ePerl程序中,并用Perl的DBI模块支持其运行。

    不要着急。我们已经建立了系统,剩下的只是编码。
    发布人:Crystal 来自:LinuxAid