一、在服務器上部署MySQL服務基本步驟合注意點
1)安裝MySQL(命令安裝、安裝包安裝等)
2)考慮是否須要一個獨立的操做系統用戶權限來運行MySQL程序。
3)路徑的設置
4)root密碼 (附錄A:沒有root密碼,系統是不安全的)
5)刪除
匿名用戶和僅供測試使用的數據庫
6)啓動MySQL服務器並將其設置爲自動運行。
二、使用MySQL命令行或其餘終端的幾點注意
1)在MySQL自帶控制檯命令行中,每一個命令之間用分號(;)隔開,分號將告訴MySQL執行這個命令,若是漏掉分號,MySQL將不會執行。
漏掉分號的的結果是:可能在一個命令中間添加新行。由於MySQL提供了一個持續符號,是一個箭頭相似於->,如
這個符號表示MySQL期待着更多的輸入,每次按Enter都會出現這些提示符,知道輸入分號才結束。
PS:這個問題,對於新手來講,很容易忽視,我剛開始的時候也感受很萌比。
2) SQL語句不區分大小寫,但數據庫和表的名稱區分大小寫。
三、登錄到MySQL
在機器命令行,調用mysql程序
mysql -h
hostname -u
username -p
1)本機運行,可忽略 -h hostname
2)-u 只用於鏈接數據庫的用戶名稱,若是不指定,默認只是登陸該操做系統時使用的用戶名。
3)-p 命令選項用來用來告訴服務器要使用一個密碼來鏈接它,若是登陸所使用用戶名無密碼,就能夠忽略此項。並且,咱們沒必要在本行命令中包含密碼,MySQL服務器會向你詢問密碼的。實際上,沒有這樣作的更好。若是在命令行輸入密碼,它將以普通文本(明文)顯示在屏幕上。
四、基礎命令
create database
dbname ; 建立數據庫
mysql -D
dbname -h hostname -u username -p 也能夠直接指定數據庫,
use
dbname ; 能夠登錄後方便地選擇或切換當前數據庫。
show databases; 查看數據庫列表(你將只能看到當前登陸帳號權限方位內的)
show tables; 查看數據庫表
describe
tablename ; 查看特定表的詳細信息,將顯示在建立數據庫時提供的信息。
五、權限
備註:若是要創建一個Web數據庫,最好爲每一個網站應用程序單獨創建一個用戶,爲何?權限。
再強調下「最少權限原則」:一個用戶(或者一個進程)應該擁有可以執行分配給他的任務的最低級別的權限。
六、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),當嘗試登陸時,又被拒絕了,一般是由於安裝過程當中沒有刪除匿名帳戶。
七、建立數據庫表
CREATE TABLE
tablename (
columns)
注意:MySQL提供了多個表類型和存儲引擎,其中包括一些事務安全的類型。
實例解說:
注意1:MySQL每一個表只能有一個主鍵,可是這個主鍵能夠由一個字段,也能夠有多個字段組成。想text這種類型一般是不能設置成主鍵的,也不能加索引(這個特性和所選的數據引擎有關)
注意2:char(50),該數據類型將爲姓名分配50個字符的存儲空間,雖然姓名一般沒有這麼長,而後MySQL將用空格填充空餘的部分,或者,能夠選擇用 varchar類型,這種能夠根據須要分配存儲空間(加一個字節),佔用空間小,可是char類型數據速度更快。
注意3:NOT NULL,這是一個小小的優化措施,須要多解釋下,引用網上一段解釋以下:
爲何mysql字段要設置爲not null? 如今 大師來跟你們解釋解釋 mysql 首先 咱們建立一個表 asd字段爲null,qwe字段爲not null,都無默認值 sql 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'); 如今 咱們來查看這個表 windows 能夠看出 not null 的qwe字段 未設置的時候是個空字符串 null 的asd字段 未設置的時候是個NULL 安全 以上結果 你們應該均可以想像到的。 那麼爲何要設置NOT NULL呢 由於 MYSQL不是PHP,NULL不等於空字符串 好比咱們查詢qwe爲空的 服務器 select * from tb where qwe='' 能夠找到 ide 可是 性能 select * from tb where asd='' 則什麼都找不到 學習 |
八、建立索引的基本方法
數據庫性能問題一般會在數據庫上沒有建立任何索引的狀況下發生(建立沒有主鍵或索引的表是可能的)
CREATE INDEX語句常見形式以下:
CREATE [UNIQUE | FULLTEXT] INDEX index_name
ON table_name (index_column_name [ (length) ] [ASC | DESC], ... )
注意:FULLTEXT索引用來索引文本字段,可選的 length 字段容許指定該字段前length個字符將被索引,也能夠指定一個索引升序或降序。
九、理解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個字符)
十、列數據類型
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個元素。
章節結束語:
若是你問我爲何要學習這麼仔細,由於,我就是想去弄清楚它。