程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL&Perl,便利之合

MySQL&Perl,便利之合

編輯:關於MYSQL數據庫
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
  
  
  
  
  


  
  

  
  # Here comes the button's title for the launching page
  
  

  
  
  
  
  下面用腳本去查詢數據庫。
  

Search by author


  
  


您正在看的MySQL教程是:MySQL&Perl,便利之合。Author name :   type="text" size="30" name="author">  value="Search...">

  
  
  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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved