国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

用PHP和MySQL構建一個數據庫驅動的網站(三)

2024-07-24 12:56:16
字體:
來源:轉載
供稿:網友
摘要

  在這一章,我們將集中學習如何使用結構化查詢語言(sql)在mysql數據庫中工作。

(2002-08-29 14:11:10)

--------------------------------------------------------------------------------
by wing, 出處:linuxaid


第二章: mysql入門

  歡迎回到這個教程!在上一章,我們學習了安裝和配置php和mysql這兩個軟件。在這一章,我們將集中學習如果使用結構化查詢語言(sql)在mysql數據庫中工作。


數據庫入門

  上一章簡要說明的那樣,php是一個服務器端的腳本語言,通過這個語言你可以在你的web頁面中添加指令,這樣你的web服務軟件(可能是apache,personal web server或其他任何軟件)會在向發出請求的瀏覽器發送這些頁面前首先執行它。在那個簡單的例子中,我展示了如何每次在接受請求的web頁面中插入當前的日期。


  都很清楚了,但是如果在其中添加一個數據庫會真正引起我們的興趣。一個數據庫服務器(我們這里是mysql)是一個使用一定格式存儲大量信息的程序,通過這個程序你可以很簡單地使用象php這樣的腳本語言來訪問數據。例如,你可以使用php在數據庫中獲得一個笑話的列表并將其顯示到你的web站點。


  子中,笑話被完全存儲在數據庫中。這樣做有兩個好處。首先,你不再需要為你的每個笑話寫一個html文件,你只需要寫一個php文件來從數據庫中引出任何的笑話并顯示它;其次,要添加笑話到你的web站點中,也僅僅是添加笑話到數據庫中。php代碼在新笑話包含在列表中時可以自動顯示新的笑話。


  們通過這個例子來看看數據是如何在數據庫中存儲的。一個數據庫包含一個或幾個數據表(table),每一個數據表包含了一個事物的列表。對于我們的笑話數據庫來說,我們一開始可能需要一個名為“jokes”的數據表,這個數據表包含了一個笑話列表。數據庫中每個數據表包含一個或幾個數據列(column)或數據域(field)。回到我們的例子中來,我們的“jokes”數據表可能有這樣的兩列:笑話的正文以及笑話添加到數據庫中的日期。每個存儲在數據表中的笑話我們稱之為一行。要了解這兒提到的所有術語,你可以看下面這張圖:


  在笑話正文(“joketext”)和添加日期(“jokedate”)這兩個數據列之外,我還增加了一個叫做“id”的數據列。這個數據列的作用是給每個笑話分配一個唯一的號碼,這樣我們可以很容易地查閱并區分這些笑話。


  習一下,上面的數據表中有三個數據列、兩行。每一行包含了一個笑話的id、它的正文以及它的添加日期。掌握了這些基本術語后,我們將開始使用mysql。


登錄mysql

  sql數據庫的標準界面是連接到mysql服務軟件(在第一章內安裝)并同時輸入命令。要連接上服務器,我們需要使用mysql客戶端程序。如果你自己安裝了mysql服務軟件,不管你是在windows下安裝的,還是在一些unix的版本下安裝的,你應該已經在安裝服務程序的同一地點安裝了這個客戶端程序。在linux,這個程序被稱之為mysql,其位置默認是/usr/local/mysql/bin 目錄。在windows下,這個程序被稱之為mysql.exe,其位置默認是c:mysqlin目錄。


  是自己安裝的mysql服務器(例如,你是在你的web主機提供商的mysql服務器上工作),那么有兩個方法連接到mysql服務器,第一個方法是使用telnet登錄到你的web主機的服務器上,然后在那兒運行mysql。第二種方法是從http://www.mysql.com/(for windows和for linux的都可以免費獲得) 下載并安裝mysql客戶端程序。這兩種方法都可以很好地工作,你的web主機可能支持其中的一種,或者兩種都支持(你需要去問清楚)。


  擇了哪種方法,不管你使用的是哪種系統,你最終都應該在一個命令行執行mysql客戶端程序去連接你的mysql服務器,你需要輸入下面的命令:

mysql -h  -u  -p



  換成你的mysql服務器正在其上運行的計算機的主機名或ip地址。如果你在運行服務的同一臺計算機上運行客戶端程序,你可以不使用-h 而且直接使用-h localhost。應該是你的mysql用戶名。如果你是自己安裝的mysql服務器,這應該就是root。如果你是使用的你的web主機提供商的mysql服務,這應該是他們為你指定的mysql用戶。


  參數告訴程序提示你輸入你的口令,這將在你輸入上面的命令后立即顯示。如果你是自己安裝的mysql,你的口令就是你在第一章內選擇的root的口令。如果你是使用的你的web主機提供商的mysql服務,這應該是他們給你的mysql口令。


  切都輸入好了,mysql客戶端程序會連接上mysql服務器并返回給你一個mysql的命令行:

mysql>



  ysql服務器實際上是連接了好幾個數據庫(這使得一個web主機可以為幾個用戶設置同一個mysql服務器)。所以你的下一步應該是選擇一個工作的數據庫。首先,獲得當前服務器上的數據庫列表。輸入下面的命令(不要忘了分號!),然后打回車。

mysql> show databases;



  l會顯示給你服務器上的數據庫列表。如果這是一個新安裝的服務器(也就是說,這是你在第一章里自己安裝的)。這個列表將會是這樣:


+----------+
| database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.11 sec)




  l服務器使用第一個被稱之為mysql的數據庫來管理用戶及其口令和權限。現在我們暫時不會關心這個數據庫,在以后的章節中,我們會討論它。第二個叫test是一個數據模塊。你可以刪除這個數據庫,在我們的教程中不會使用到它(我們會自己建立一些數據庫)。刪除什么東西在mysql中被稱之為“dropping”,要刪除test數據庫,其正確的命令應該是:

mysql> drop database test;



  入了這個命令,并打了回車,mysql會刪除這個數據庫,并返回query ok。注意,并不會提示你諸如“這是否確定”這樣的信息。所以你在mysql輸入命令必須十分小心。就象我們在這兒看到的,你可以完全刪除數據庫--包含它其中的所有信息--僅僅只用一個命令!


  入下一步之前,讓我們先來看看mysql命令行的連接。正如我們已經注意到的,在mysql中的所有命令都必須以分號(;)結束。如果你忘記了這個分號,mysql會認為你還沒有結束輸入你的命令,并會讓你這下一行中繼續錄入:


mysql> show
    -> databases;




  l在等待你輸入命令中的剩余部分時,提示符會從mysql>改變為->。對于一個長命令,這是很有用的,你可以將你的命令分幾行輸入。


  途發現你的命令出錯了,你可以完全取消當前的命令(譯者注:是指尚未執行的命令)并從頭來過。要完成這個工作,你只需要輸入c并按回車:

mysql> drop databasecmysql>



  l會完全忽略你剛才輸入的命令,并返回到提示符等待你的下一個命令。


  你要退出mysql客戶端程序時,你只需要輸入quit或者exit (這兩個命令是完全一樣的)。這是唯一不用以分號結尾就可以執行的命令。

mysql> quitbye



什么是sql?

  程中我們用來告訴mysql去做什么的命令其實是一個叫結構化查詢語言(sql)的規范的一部分。sql中的命令也被稱之為查詢(在這篇教程中,我們會交替地采用這兩種稱呼)。


  實現與絕大多數的數據庫的交互的標準語言,所以即使你將來不再使用mysql,轉而使用microsoft sql server,你會發現絕大多數命令是相同的。你必須理解sql和mysql的區別。mysql是你正在使用的數據庫服務軟件。sql是你用來實現和數據庫的交互的語言。


建立一個數據庫

  web主機提供商已經為你分配了一個用來工作的數據庫。你先耐心地等待一下,等一下我們會和你繼續討論下面的問題。如果你是在自己安裝的mysql服務器上工作。執行下面的命令,很容易地你就可以建立一個數據庫了:

mysql> create database jokes;



  庫的名字是jokes,這是為了與我們工作的例子一致。其實你可以給你的數據庫起任何你自己喜歡的名字。不過,如果你是在web主機提供商的mysql服務器上工作,它們可能已經為你建立了一個數據庫,你就沒法選擇數據庫的名字了。


  已經有了一個數據庫,我們需要告訴mysql我們想要使用這個數據庫。下面這個命令應該也不太難記:

mysql> use jokes;



  以開始使用你的數據庫了。在你在其中添加數據表之前,這個數據庫將是空的,我們的第一步工作應該是建立一個數據表來保存我們的笑話。


建立一個數據表

  遇到的sql命令都是非常簡單的,但是因為數據表是比較靈活的,相應地建立它們的命令就要復雜得多了。建立數據表的基本格式是這樣的:


mysql> create table <table name;> (
    -> <column 1 name;> <col. 1 type;> <col. 1 details;> ,
    -> <column 2 name;> <col. 2 type> <col. 2 details;> ,
    -> ...
    -> );




  現在回到我們的例子“jokes”表。這個表有三個數據列:id(一個數字)、joketext(笑話的正文)和jokedate(加入的日期)。建立這個表的命令應該是這樣的:


mysql> create table jokes (
    -> id int not null auto_increment primary key,
    -> joketext text,
    -> jokedate date not null
    -> );



  看上去很復雜,是吧?讓我們將它分解一下:

  第一行是比較簡單的;它說明我們想要建立一個新的名為jokes的數據表。

  第二行說明我們需要一個數據列叫id,這個列的類型應該是一個整數(int)。這一行還定義了這個數據列的其他一些信息。首先,這一行不允許為空(not null)。第二,如果你沒有為一列指定一個值,mysql會選擇使用一個比當前最大值大的值(auto_increment)。最后,這個數據列還是這數據表的唯一的標識符,所以這個數據列中的所有值都應該是不重復的(primary key)。

  第三行是非常簡單的;這說明我們需要一個數據列叫joketext,這個列的類型應該是一個文本(text)。

  第四行定義了我們的最后一列,列名是jokedate,這個列的類型是日期型(date)這個列也不能為空(not null)。

  請注意,我們在輸入sql命令時,大小寫是完全自由的,但是在一個unix-based系統下運行的mysql服務,因為我們必須與mysql數據目錄下的目錄和文件一致,當遇到數據庫名和表名時,我們必須區分大小寫。否則,mysql是完全對大小寫不敏感的,只有一種情況例外,在同一命令中多次出現的表名、列名以及其他名字必須在拼寫上完全一致。

  我們還應該注意到,我們為我們建立的每一列指定了一個指定的類型。 id是一個整型,joketext是一個文本型,jokedate是一個日期型。mysql允許我們為每一個列定義一個類型。 這不僅僅可以幫助你組織數據,而且你可以利用它對數據進行比較(我們在下面會看到)。要想得到一個關于mysql支持的數據類型的完整的列表,你可以參看mysql用戶手冊。

  總之,如果你正確輸入了上面的命令,mysql會返回 query ok并會為你建立你的第一個數據表。如果你在輸入中出了什么錯誤,mysql會告訴你輸入的語名有問題,而且會給你一些提示,說明什么地方它不能理解。

  對于這樣一個復雜的命令,最終只出現query ok是相當單調的。讓我們看看你的新數據表是不是正常地建立了。輸入下面的命令:

mysql> show tables;


  響應應該是這樣的:


+-----------------+
| tables in jokes |
+-----------------+
| jokes |
+-----------------+
1 row in set



  這是一個關于我們的數據庫(我們在前面將其命名為jokes)中的所有表的列表。這個列表僅僅包含了一個數據表:jokes,這個表是我們剛剛建立的。看來一切都好了,讓我們再來近看一下這個jokes表:


mysql> describe jokes;
+----------+---------+------+-----+------------+- -
| field | type | null | key | default | ...
+----------+---------+------+-----+------------+- -
| id | int(11) | | pri | 0 | ...
| joketext | text | yes | | null |
| jokedate | date | | | 0000-00-00 |
+----------+---------+------+-----+------------+- -
3 rows in set



  這兒提供了一個數據列的列表。正如我們看到的,這個表中有三個列,在返回的結果表中這被表示為三行。詳細資料比較難以看懂,但是你認真看一下,應該還是能了解其大致的含義的。不要為這件事過于擔心。我們還會繼續學習,我們還會在這個表中添加一些笑話。

  我們還需要知道一些其他的事,例如刪除一個表。這和刪除一個數據庫一樣的簡單,簡單得令人恐怖。命令也幾乎一樣:

mysql> drop table ;


向數據庫中添加數據

  我們的數據庫和數據表都已經建立好了,現在我們該向我們的數據庫中添加笑話了。向數據庫中添加數據的命令被稱之為insert。這個命令有兩種基本格式:


mysql> insert into <table name;> set
    -> columnname1 = value1,
    -> columnname2 = value2,
    -> ...
    -> ;
mysql> insert into <table name;>
    -> (columnname1, columnname2, ...)
    -> values (value1, value2, ...);
    所以要向我們的數據表中添加笑話,我們可以在下面的兩個命令中選擇一個:
mysql> insert into jokes set
    -> joketext = "why did the chicken cross theroad? to get to the other side!",
    -> jokedate = "2000-04-01";
mysql> insert into jokes
    -> (joketext, jokedate) values (
    -> "why did the chicken cross the road? toget to the other side!",
    -> "2000-04-01"
    -> );



  請注意在insert命令的第二種格式中,你給出的列的順序必須與你給出的數據的順序一致。

  現在你知道如何向表中添加了,下面讓我們來看看如何顯示表的內容。

顯示存儲的數據

  顯示你的數據庫中表的存儲數據的命令,被稱之為select,這個命令無疑是sql語言中最復雜的命令。說它復雜,是因為數據庫的最主要的優點就是可以機動地給出數據。而機動性就是通過這個命令實現的。

  下面的命令會列出存儲在表jokes中的所有數據:

mysql> select * from jokes;


  這個命令意味著“從jokes中挑選所有的東西”。如果你試著輸入這個命令,你會看到這樣的顯示:


+----+---------------------------------------
------------------------+------------+
| id | joketext
                        | jokedate |
+----+---------------------------------------
------------------------+------------+
| 1 | why did the chicken cross the road? to
get to the other side! | 2000-04-01 |
+----+---------------------------------------
------------------------+------------+
1 row in set (0.05 sec)



  這看上去有點混亂,這是因為joketext列實在是太長了。因為這個原因,我們可能想要告訴mysql省去joketext列,這個命令會實現這個功能:

mysql> select id, jokedate from jokes;


  這一次我們不再告訴它“挑選所有的東西”了,我們告訴它我們對顯示哪些列感興趣。結果應該是這樣的:


+----+------------+
| id | jokedate |
+----+------------+
| 1 | 2000-04-01 |
+----+------------+
1 row in set (0.00 sec)



  但是我們是不是可以多少顯示一點笑話正文的內容呢?作為對我們所想顯示的列的補充,我們可用“函數”來更改我們所要顯示的列。有一個叫做left的函數,可以讓我們告訴mysql當我們顯示一個數據列時最多顯示幾個字符。例如,如果我們只想顯示joketext列的前20個字符:


mysql> select id, left(joketext,20), jokedate from jokes;
+----+----------------------+------------+
| id | left(joketext,20) | jokedate |
+----+----------------------+------------+
| 1 | why did the chicken | 2000-04-01 |
+----+----------------------+------------+
1 row in set (0.05 sec)



  明白它是如果工作的了嗎?另一個有用的函數是count,通過這個函數,我們可以很簡單地得到返回結果的個數。例如,如果我們想要找出在我們的表中我們存儲了多少笑話,我們可以用下面這個命令:


mysql> select count(*) from jokes;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.06 sec)



  正如我們看到的,在我們的表中只有一個笑話。

  到目前為止,我們的所有的例子都是針對表中的所有記錄的。作為對select命令的補充,我們可以使用“where子句”,這樣我們可以對返回的結果進行限制。看看下面這個例子:


mysql> select count(*) from jokes
    -> where jokedate >= "2000-01-01";



  這個查詢語句會數出所有日期“大于或等于”2000年1月1日的記錄,對于一個日期來說“大于或等于”意味著“在當天或在此之后”。

  有一種比較特殊的用法可以找出包含某一段文字的記錄。你可以看看這個查詢語句:

mysql> select joketext from jokes
    -> where joketext like "%chicken%";



  這個查詢語句顯示了所有joketext列包含單詞chicken的笑話的正文。like關鍵字告訴mysql指定的列必須匹配給定的表達式。在這里,我們使用的表達式是"%chicken%"。這兒的%說明單詞chicken可以出現在任何字符串的前面或后面。

  條件也可以在where子句中組合使用,這樣可以做更復雜的查詢。例如我們要顯示2000年4月份的knock-knock笑話,我們可以使用下面的查詢語句:


mysql> select joketext from jokes where
    -> joketext like "%knock knock%" and
    -> jokedate >= "2000-04-01" and
    -> jokedate < "2000-05-01";



  在表中添加再一些笑話,再試驗試驗select語句。熟悉select語句會有助于學習這個教程。

  我們還可以用select語句做很多事,但是我們在這里將不再詳細討論它,我們在需要的時候才會再講到其他一些高級的功能。如果你太好奇,沒法再等下去的話,你可以去看mysql用戶手冊。

修改存儲的數據

  一旦你已經向數據庫的表中輸入了一些數據,你可能想要進行一些修改。例如改正拼寫錯誤,以及其他有關笑話的數據,所有的這些改變都可以用update命令來完成。這個命令包含了一些insert命令(在設置列的數值方面)和 select命令(在選取改變對象方面)的基本原理。update命令的基本格式是這樣的:


mysql> update  set
    -> =, ...
    -> where ;



  例如,如果你想要改變上面輸入的笑話的日期,你需要輸入下面的命令:

mysql> update jokes set jokedate="1990-04-01" where id=1;


  這兒我們用到了id列。通過它你可以很方便地指定你要改變的笑話。where子句也可以用在這里,就象在select命令中那樣。下面的命令是改變所有正文中包含單詞chicken的笑話的日期:


mysql> update jokes set jokedate="1990-04-01"
    -> where joketext like "%chicken%";



刪除存儲數據

  在sql中刪除一個內容是令人恐怖的簡單,下面是這個命令的格式:

mysql> delete from  where ;


  要刪除所有包含chicken的笑話,你只需要輸入下面的命令:

mysql> delete from jokes where joketext like "%chicken%";


  這里的where子句是可選的,但是如果你不用它,你應該清楚你在干什么,因為這時其實你是在清空這個數據表。下面這個命令將清空jokes數據表:

mysql> delete from jokes;


結語

  事實上除了我們在這里已經看到的這些基本的命令,mysql數據庫系統和sql語句還有許多其它值得學的東西,但是我們提到的這些命令是一些最常用的命令。到目前為止,我們只是在一個數據表中工作。要理解關系型數據庫引擎的真正的強大功能,你還需要學會如果同時使用幾個表以描述表之間可能存在的復雜的關系。

  所有的這些內容以及一些其他的內容,我們都會在我們的這個教程的第四章內講到,在第四章中,我們會討論數據庫的設計原理并參考一些復雜一點的例子。現在,我們需要能夠熟練地使用命令行界面來操作mysql。

  在第三章內,我們將深入研究php這個服務器端的腳本語言,并且學習使用它來建立一個動態的web頁面。
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 蒲城县| 婺源县| 永靖县| 阿拉尔市| 新巴尔虎左旗| 汾西县| 东丽区| 临洮县| 吉首市| 麻栗坡县| 香港 | 屏东县| 云林县| 夏津县| 江源县| 明光市| 山西省| 怀集县| 包头市| 厦门市| 西青区| 商河县| 抚宁县| 西乌珠穆沁旗| 迭部县| 深州市| 崇仁县| 武城县| 元谋县| 吕梁市| 溧水县| 肥城市| 卢氏县| 抚州市| 平顺县| 赤壁市| 元谋县| 墨竹工卡县| 邯郸市| 金平| 平度市|