What about this nice pair ?
MySQL是一種關系型數據庫系統(RDBMS),其主頁為http://www.mysql.com/。它由GNU GPL發布並供免費使用,請注意閱讀版權聲明。 它可以在許多平台上工作,既作服務器同時又是客戶端。除MySQL之外還有一些其它的自由軟件性質的RDBMS,在這裡不作任何比較,本文僅討論MYSQL。我們也不將其與那些大型商業數據庫像 Informix,Oracle,Sybase等作比,有足夠理由相信MySQL是Internet上使用最廣泛的數據庫系統之一。在這篇文章裡我們使用的MySQL版本是3.23.36。現在的穩定發行版本是3.23.46,而苦苦等待的4.0版仍在測試之中。人們可以從網上下載到它們的源代碼或包文件。
為了將MySQL與Perl結合使用,你還需要些東西: Perl DBI模塊。至少你應該下載DBI, Msql-MySQL-modules, Data-Dumper和Data-ShowTable等。
本文不介紹它們的安裝過程,因為那很簡單,同時包中的說明文件已經提供了你需要知道的所有內容。
Perl全稱是實用摘錄與報告語言(Practical Extraction and Report Language)。 最初它用於文件處理(分析,摘要...),很快它的功能就有了擴展。 你幾乎可以用它來做任何任何事情:系統管理,CGI腳本程序以及數據庫接口程序。
Perl包含於許多(如果不能稱是全部的話)Unix發行版本中,它們中有些是免費的,有些不是。本文寫作時,穩定的版本是5.6.1,版本5.7.2在測試中。本文采用的是5.005_03,很不錯的一個版本,盡管老點。如果你的機子還沒有裝Perl,你可以從http://www.perl.com/下載。Perl提供了許多模塊,用它們幾乎可以完成任何事,你可以從這個網站的CPAN欄目找到它們。
最後一點,為了讓這兩種軟件真正開始工作,你還需要一個web服務器。Apache應該是一個不錯的選擇,它集成於多種Unix系統中。如果你還沒有,可以到http://www.apache.org/下載。
使用的范例
你也許已經注意到LinuxFocus雜志有多種語言的版本。這就意味著作為編輯需要同時管理新文章以及它的譯文版本。一般情況下,我們可以看到大約200篇文章,平均每篇文章有5個語言的版本,這樣產生了大約1000篇文章並且還在繼續增長!這些文章需要被存檔,格式標准化,總結及摘要.....應該怎麼做這些事?當然,用Perl!
我們的總編Guido Socher編寫的許多perl程序使我們的工作變的簡單了許多,他寫過一本三部頭的 Perl教程和一本評論Perl的書。參照本文末尾的參考文獻部分。
Javi,我們的西班牙編輯,用Perl編寫了一個程序來管理翻譯進度。
Atif是我們的明星作者,他來自perl王國,所以他的母語就是Perl。 他同時也撰寫關於MySQL方面文章,致力於一個WEB管理工具改進工作。同樣你可以在參考文獻部分找到他。
總之,如果你在尋找一個Perl世界,加入LinuxFocus。
我是LinuxFocus法文版的編輯之一,我更懶,於是創建了自己的LinuxFocus數據庫,猜猜用什麼: MySQL 和Perl!
建立數據庫
首先你應當已經正確安裝了MySQL,並配置好用戶密碼。關於安裝並不是本文討論的內容,MySQL自帶的大量文檔已經描述了所有細節。
用mysql.server啟動MySQL服務器,這個命令同時調用 safe_MySQLd 守護進程,因此你可以給它傳參。
用
MySQL -h host -u user -p
連接到服務器,如果服務器就裝在你本機上,就不用加參數-h host。
輸入密碼無誤後,你將連接到服務器。現在可以建立自己的數據庫了。
在MySQL命令提示符狀態下輸入
CREATE DATABASE lf;
,這個是我們的示范數據庫(lf代表LinuxFocus),你可以根據你的需要命名成別的。接下來就是給用戶授權了,當然首先你要有足夠的權限(你需要用有administrator權限的用戶連接)。如果需要讓某個用戶管理數據庫,通過
GRANT ALL ON lf.* TO username;
給他授權。輸入
USE lf
選擇剛才創建的數據庫,並創建一張表。在這裡我們創建的表是trissue,命令格式為:
CREATE TABLE trissue (num INTEGER UNSIGNED, category VARCHAR(25), title VARCHAR(40), author VARCHAR(20),
en VARCHAR(20), es VARCHAR(20), fr VARCHAR(20),de VARCHAR(20), nl VARCHAR(20), ru VARCHAR(20), tk VARCHAR(20), issue VARCHAR(20));
通過下面的命令可以檢查一下我們剛才創建的表內容是否正確
USE lf
SHOW TABLES;
DESCRIBE trissue;
下面我們需要在表中填入數據,往一張空表中導入數據的最簡單的方法就是使用一個帶TAB分隔符的文本文件。如果文本文件已經准備好,輸入
LOAD DATA LOCAL INFILE "maindb.txt" INTO TABLE trissue;
如果你的文本文件沒有問題,那麼現在這張表就已經填好數據,你可以通過輸入以下命令檢驗一下:
SELECT * FROM trissue;
這將導致顯示一個很長的列表。現在,你就可以進行查詢來獲得任何類型的數據了。
ok,到現在為止,我們僅僅用了MySQL,就可以做任何事情,那麼,用Perl來做什麼?
Perl的工作
Perl可以幫助我們自動進行查詢,將結果顯示到一個WEB浏覽器上,等等。重復一遍,首先需要為Perl安裝正確的模塊使之能與MySQL聯合工作。
現在我們用Perl來寫一個CGI腳本。它的作用是將Perl與Html技術結合以實現查詢數據庫並將結果格式化輸出。
我們用一個簡單的腳本來查詢某一作者的所有文章,顯示文章的編號,分類,標題,不同語言版本的翻譯者的姓名,發表文章的雜志期號。
你可以將這個腳本當作一個模塊使用,但是注意這個例程並不是一個非常可靠的程序。你可以從下面的鏈接下載到一個有詳細注釋的版本。=>here<=.
#!/usr/bin/perl -Tw
# First, we say this is a "Tainted" Perl script.
#
# This is a comment
# db consult
#
# We use the Perl DBI module
use DBI;
# As CGI :
use CGI qw(param());
print <
Content-type: text/Html
下面用腳本去查詢數據庫。
Search by author
END_of_start
if (param("author") ne '') {
$author = param("author");
$autsrch.='"';
$autsrch.=$author;
$autsrch.='"';
# We connect to the database named lf as user doe
$dbh = DBI->connect("DBI:MySQL:lf","doe",'');
$sth = $dbh->prepare("
select *
from
trissue
where
author = $autsrch
");
$sth->execute;
接著用腳本去顯示查詢結果。如果我們不限制查詢條件,將會顯示出數據庫的所有內容,如果我們提供一個作者姓名,則會顯示出與該作者相關的所有文章。當你的數據庫有上千條記錄時,不推薦顯示出所有內容!
print <
Num
Category
Title
Author
En
Es
Fr
De
Nl
Ru
Tk
Issue
END_suite
while( ($num,$category,$title,$author,$en,$es,$fr,$de,$nl,$ru,$tk,$issue) =$sth->fetchrow() ) {
print "";
print " $num";
print " $category";
print " $title";
print " $author";
print " $e