1、在伺服器上部署MySQL服務基本步驟合注意點
1)安裝MySQL(命令安裝、安裝包安裝等)
2)考慮是否需要一個獨立的作業系統使用者權限來運行MySQL程式。
3)路徑的設定
4)root密碼 (附錄A:沒有root密碼,系統是不安全的)
5)刪除 匿名使用者和僅供測試使用的資料庫
6)啟動MySQL伺服器並將其設定為自動運行。
2、使用MySQL命令列或其他終端的幾點注意
1)在MySQL內建控制台命令列中,每個命令之間用分號(;)隔開,分號將告訴MySQL執行這個命令,如果漏掉分號,MySQL將不會執行。
漏掉分號的的結果是:可能在一個命令中間添加新行。因為MySQL提供了一個持續符號,是一個箭頭類似於->,如
這個符號表示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個元素。
章節結束語:
如果你問我為什麼要學習這麼仔細,因為,我就是想去弄清楚它。