PHP與MySQL學習筆記9:建立Web資料庫

來源:互聯網
上載者:User
1、在伺服器上部署MySQL服務基本步驟合注意點

1)安裝MySQL(命令安裝、安裝包安裝等)

2)考慮是否需要一個獨立的作業系統使用者權限來運行MySQL程式。

3)路徑的設定

4)root密碼 (附錄A:沒有root密碼,系統是不安全的)

5)刪除 匿名使用者和僅供測試使用的資料庫

6)啟動MySQL伺服器並將其設定為自動運行。


2、使用MySQL命令列或其他終端的幾點注意

1)在MySQL內建控制台命令列中,每個命令之間用分號(;)隔開,分號將告訴MySQL執行這個命令,如果漏掉分號,MySQL將不會執行。

漏掉分號的的結果是:可能在一個命令中間添加新行。因為MySQL提供了一個持續符號,是一個箭頭類似於->,如

mysql> grant select

->

這個符號表示MySQL期待著更多的輸入,每次按Enter都會出現這些提示符,知道輸入分號才結束。

PS:這個問題,對於新手來說,很容易忽視,我剛開始的時候也感覺很萌比。

2) SQL語句不區分大小寫,但資料庫和表的名稱區分大小寫。


3、登陸到MySQL

在機器命令列,調用mysql程式

mysql -h hostname -u username -p

1)本機運行,可忽略 -h hostname

2)-u 只用於串連資料庫的使用者名稱稱,如果不指定,預設只是登入該作業系統時使用的使用者名稱。

3)-p 命令選項用來用來告訴伺服器要使用一個密碼來串連它,如果登入所使用使用者名稱無密碼,就可以忽略此項。而且,我們不必在本行命令中包含密碼,MySQL伺服器會向你詢問密碼的。實際上,沒有這樣做的更好。如果在命令列輸入密碼,它將以普通文本(明文)顯示在螢幕上。


4、基礎命令

create database dbname ; 建立資料庫

mysql -D dbname -h hostname -u username -p 也可以直接指定資料庫,

use dbname ; 可以登陸後方便地選擇或切換當前資料庫。

show databases; 查看資料庫列表(你將只能看到當前登入帳號許可權方位內的)

show tables; 查看資料庫表

describe tablename ; 查看特定表的詳細資料,將顯示在建立資料庫時提供的資訊。


5、許可權

備忘:如果要建立一個Web資料庫,最好為每個網站應用程式程式單獨建立一個使用者,為什嗎?許可權。

再強調下“最少許可權原則”:一個使用者(或者一個進程)應該擁有能夠執行分配給他的任務的最低層級的許可權。


6、MySQL許可權系統

1) GRANT和REVOKE命令分別用來授予和取消MySQL使用者的許可權,這些許可權分為4個層級:

全域;

資料庫;

表;

列 。

GRANT命令常用來建立命令並賦予相應許可權,常見形式是:

GRANT privileges [columns]

ON item

TO user_name [IDENTIFIED BY 'password']

[REQUIRE ssl_options ]

[WITH [GRANT OPTION | limit_options] ]


方括弧[]內的子句是可選的,上例有很多佔位符。幾點解釋:

>第一個預留位置privileges 應該是由逗號分開的一組許可權。

>columns是可選的,用來對每一列指定許可權(使用單列的名稱或者用逗號分開的一組列的名稱)。

>預留位置item是新許可權所應用於的資料庫或表。如果指定為*.*,將許可權應用於所有資料庫,這叫賦予全域許可權。 若沒使用特定資料庫,指定*也可完成全域許可權賦予。常見的是以dbname.*指定資料庫中的所有表,dbname.tablename的形式指定單個表。

>user_name 是資料庫的一個使用者,可以通過包含一個主機名稱來區分不同域的使用者。如 ss @localhost 和 ss@somewhere.com .也可以通過這個特性指定使用者從什麼地方串連到本機,甚至可以指定他們在特定的地方可以訪問哪些表和資料庫,細粒度的許可權控制可以有助於提高安全性。

>REQUIRE 子句允許指定使用者是否必須通過加密通訊端連結,或者其他SSL選項。

>WITH GRANT OPTION選項,如果指定,表示允許指定的使用者向別人授予自己所擁有的許可權。

也可以通過指定WITH子句指定每一個使用者每小時執行查詢、更新和串連的數量。(在共用的系統上限制單個使用者的負載時,這些子句非常有用)

如:MAX_QUERIES_PER_HOUR n ;MAX_UPDATES_PER_HOUR n ;MAX_CONNECTIONS_PER_HOUR n ;


2)許可權儲存在名為mysql的5個系統資料表中,分別是,mysql.user、mysql.db、mysql.host、mysql.tables_priv、mysql.columns_priv。(直接修改這些表,和用GRANT命令一個效果,互相替代)

3)許可權的類型和類別

MySQL中存在3個基本類型的許可權,適用於賦予一般使用者的許可權、適用於賦予管理員的許可權和幾個特定的許可權。


除了表9-1中的許可權,還有兩種已經不再使用的許可權REFERENCES 和 EXECUTE許可權。

大多數情況下,通常只需要常見的增刪改查準系統,

插入(SELECT)、刪除(DELETE)、更新(UPDATE)、選擇(SELECT)

如:

grant select, insert, delete, update on books.* to bookeditor identified by 'book123456';




與 GRANT對應的命令時REVOKE,用法類似:

REVOKE

REVOKE privileges [(columns)]

ON item

FROM user_name

如果給出了WITH GRANT OPTION,可以用如下方式撤銷,

REVOKE ALL PRIVILEGES,GRANT

FROM user_name


例子:



備忘:輸入quit 命令退出MySQL內建的監視程式,最好應該在以剛剛建立的Web使用者的身份登入,測試每件事情是否正常。如果GRANT語句已經執行(應該要flush privileges),當嘗試登入時,又被拒絕了,通常是因為安裝過程中沒有刪除匿名賬戶。


7、建立資料庫表

CREATE TABLE tablename ( columns)

注意:MySQL提供了多個表類型和儲存引擎,其中包括一些事務安全的類型。

執行個體解說:



注意1:MySQL每個表只能有一個主鍵,但是這個主鍵可以由一個欄位,也可以有多個欄位組成。想text這種類型通常是不能設定成主鍵的,也不能加索引(這個特性和所選的資料引擎有關)

注意2:char(50),該資料類型將為姓名分配50個字元的儲存空間,雖然姓名通常沒有這麼長,然後MySQL將用空格填充空餘的部分,或者,可以選擇用 varchar類型,這種可以根據需要分配儲存空間(加一個位元組),佔用空間小,但是char類型資料速度更快。

注意3:NOT NULL,這是一個小小的最佳化措施,需要多解釋下,引用網上一段解釋如下:

為什麼mysql欄位要設定為not null?
現在 大師來跟大家解釋解釋

首先 我們建立一個表 asd欄位為null,qwe欄位為not null,都無預設值

CREATETABLE`tb` ( `id`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `asd`VARCHAR(45) NULL, `qwe`VARCHAR(45) NOT NULL, PRIMARYKEY (`idtb`))

然後

insert tb(asd) values('123123123'); insert tb(qwe) values('123123123');

現在 我們來查看這個表



可以看出
not null 的qwe欄位 未設定的時候是個Null 字元串
null 的asd欄位 未設定的時候是個NULL

以上結果 大家應該都可以想像到的。
那麼為什麼要設定NOT NULL呢
因為 MYSQL不是PHP,NULL不等於Null 字元串
比如我們查詢qwe為空白的

select * from tb where qwe=''

可以找到



但是

select * from tb where asd=''

則什麼都找不到

8、建立索引的基本方法

資料庫效能問題通常會在資料庫上沒有建立任何索引的情況下發生(建立沒有主鍵或索引的表是可能的)

CREATE INDEX語句常見形式如下:

CREATE [UNIQUE | FULLTEXT] INDEX index_name

ON table_name (index_column_name [ (length) ] [ASC | DESC], ... )

注意:FULLTEXT索引用來索引文字欄位,可選的 length 欄位允許指定該欄位前length個字元將被索引,也可以指定一個索引升序或降序。


9、理解MySQL的標識符

在MySQL中,提供了5中類型的標識符:

Database(資料庫)、Table(表)、Column(列)、index(索引)和 Alias(別名)

注1:MySQL中的資料庫將被映射到具備某種檔案結構的目錄,而表則映射到檔案。這對賦予他們的名字有直接影響,它也可以影響這些名字的大小寫,如果作業系統區分目錄與檔案的大小寫。

(目錄和包含資料的檔案的位置需要在配置中設定,可以使用mysqladmin命令來查看它們在系統中位置,windows下的bin目錄有mysqladmin.exe這個程式)

注2:在MySQL標識符中不能使用ASCII(0)(null)、ASCII(255) (BLANK FF)或引號字元(這3個字元)



10、列資料類型

MySQL中3種基本的列資料類型:數字、日期和時間、字串。每個類型又包含很多子類,這3中類型㤇不同的儲存空間,一般來說,選擇列資料類型的時候,基本原則是選可以滿足資料的最小類型。

注意:對於許多資料類型,建立該類型列時,可以指定最大的 顯示長度,下表中 就用M表示,M的最大值可為255,如果M是可選的,就放在方括弧內.

1)數字類型

數字類型分為整形和浮點數

注1:整形資料,可以指定為無符號型。

注2:所有數字類型,可以指定ZEROFILL屬性,空餘部分用前置0來補充。如果將一個欄位指定為ZEROFILL,它將自動成為UNSIGNED數字類型。




2)日期和時間類型

使用MySQL的日期和時間類型,可以以字串或數字格式輸入資料,如果不手動設定,特定行中的TIMESTAMP列將被設定為最近修改該行的時間,這對於事務記錄是有意義的。



3)字串類型

第一類:一般字元串,即小短文本,包括CHAR(固定長度),VARCHAR(可變長度)類型。

注意:無論資料大小多啊胡搜啊,CHAR類型的列都會用空格填補多餘空白,擷取CHAR類型資料,與儲存VARCHAR類型資料時,MySQL都會過濾多餘空格。

第二類:TEXT和BLOB

分別適用於長文本或位元據。BLOB(binary large objects)全稱為打位元據,它支援任何資料,像、聲音資料。

第三類:SET 和 ENUM

SET類型用來指定列中的值必須來自一個特定集合中的指定值,可以包含該集合的多個值。集合最大64個元素。

ENUM 就是枚舉,與SET類似,只是該類型的列只能容納所列值之一,或者NULL,枚舉中最大可以由65535個元素。



章節結束語:

如果你問我為什麼要學習這麼仔細,因為,我就是想去弄清楚它。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.