標籤:資料庫開發 structure 讀書筆記 設定檔 service
1>mysql的設定檔在/etc下的my.cnf
2)mysql服務是一系列後台進程,mysql資料庫是一系列資料目錄和資料檔案
mysql資料庫必須在mysql服務啟動之後才可以進行訪問
3)查看mysql服務的狀態:
netstat -nlp
4)啟動/關閉服務
cd /usr/bin
./mysqld_safe &
mysqladmin -uroot shutdown
5)PRM包安裝的啟動/關閉服務
service mysql start
service mysql restart
service mysql stop
在命令列啟動mysql時,如果不加--console,啟動關閉資訊不會在介面中顯示,而是記錄
在安裝目錄下的data目錄裡面,檔案名稱字一般是homename.err,可以通過
這個檔案來查看mysql的控制台資訊。
6)sql全稱structure query language 結構化查詢語言 (SQL)
分類:
DDL:資料定義語言 (Data Definition Language):create,drop,alter(涉及表的結構)
DML:資料操縱語言:insert,delete,update,select
DCL:資料控制語言:grant,revoke
7)內建的資料庫:
information_schema:主要儲存了系統中的一些資料庫物件資訊,比如使用者表資訊、列資訊、許可權資訊、字元集資訊、分區資訊等
cluster:儲存了系統的叢集資訊
mysql:儲存了系統的使用者權限資訊
test:系統自動建立的測試資料庫,任何使用者都可以使用
8)查看全面的表定義資訊:
show create table emp \G;
9)查詢語句select預設的關鍵字是ASC(升序)
10)having和where的區別
having是對彙總後的結果進行條件的過濾
where是在彙總前就對記錄進行過濾
使用where的效率比having高
11)內串連和外串連
內串連僅選出兩張表中互匹配的記錄
外串連選出其他不匹配的記錄
外串連分為左串連和右串連
左串連:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄
右串連:包含所有的右邊表中的記錄甚至是左邊表中和它沒有匹配的記錄
12)子查詢
關鍵字有:in、not in 、= 、!= 、exists、not exists等
當子查詢的記錄數唯一的時候用=代替in
(表串連在很多情況下用於最佳化子查詢)
13)記錄聯合:用於將兩個表的資料按照一定的查詢條件查詢出來後合并到一起顯示出來
關鍵字:union 和 union all
union和union all的主要區別在於
14)使用mysql內建的協助
? contents用於顯示所有可供查詢的分類
?加? contents可以進一步查看資訊
15)快速查詢某項文法:? 空格一個再加具體命令
16)查詢位元(bit儲存的)
需要用bin(),hex()函數
17)char 和varchar的區別
char列的長度固定為建立表時聲明的長度,長度範圍在0-255
varchar列中的值為可變長字串,長度可以在0-65535
檢索時,char列刪除了尾部的空格 ,varchar保留這些空格
其實呢總結來說呢,當儲存的資料長度小於你設定varchar,char時的設定值時,使用length()函數來查看varchar,char的實際使用長度時會發現,顯示的長度小於設定值,顯示為你輸出資料的指定長度,
varchar怎麼檢索資料呢,它把你輸入的資料全部顯示,不會刪除資料尾部的空格
而char呢,它檢索時會自動刪除輸入資料的尾部空格。
當你輸入的資料經過varchar 和char的存入處理後長度大於你最初的設定值時會警示告,並且會截斷你儲存的資料,使得儲存資料的實際長度恰好等於你最初的設定長度。
總之一條,對於char和varchar而言儲存資料的長度是不會大於最初的設定長度的,但是varchar向記憶體申請的記憶體大小是會根據輸入資料大小來調節的會大於實際使用位元組數,而char不變,申請數一直等於設定數
18)enum枚舉類型
對於1-255個成員的枚舉需要一個位元組儲存
對於255-65535個成員需要兩個位元組儲存
enum類型忽略大小寫,對於插入不在enum指定範圍內的值時,插入enum集合中的第一個值
enum類型只運行從值集合中選取單個值,而不能一次選取多個值
19)set
set可以一次選取多個成員而enum只能選一個
如果插入的值重複出現,只取一次
20)安全的等於運算子<=>即使是null也能用
21)任何字串和null進行concat的結果都是null
22)INSERT(str,x,y,instr)函數:將字串str從第x位置開始,y個字元長的子串
替換為字串instr
23)truncate和round的使用方法一樣,區別在於round進行四捨五入而truncate僅僅是截斷。
24)myisam在磁碟上儲存成三個檔案:
.frm(儲存表定義)
MYD(MYData,儲存資料)
MYI(MYIndex,儲存索引)
myisam靜態儲存時後面的空格會被刪掉,前面的空格儲存
靜態表的記錄固定長度
25)innodb儲存表和索引的方式
a.使用共用資料表空間儲存,這種方式建立的表的表結構儲存在.frm檔案中,
索引和資料儲存在innodb_data_home_dir和innodb_data_file_path
定義的資料表空間中,可以是多個檔案。
b.使用多資料表空間儲存,這種方式建立的表的表結構仍然儲存在.frm檔案中,但是每個表的
資料和索引單獨儲存在.ibd中。如果是分區表,則每個分區對應單獨的.ibd檔案,
檔案名稱是“表名+分區名”,可以在建立分區的時候指定每個分區的資料檔案的位置,
以此來將表的IO均勻分布在多個磁碟上。
26)myisam建議用固定長度的資料列代替可變長度的資料列
memory(myisam的表集合,刪除操作不刪除myisam表中資料)把所有的都作為char類型處理
innodb:建議用varchar。
27)blob能夠儲存位元據,text只能儲存字元資料
如果經常做刪除和修改記錄的操作要定時執行OPTIMIZE TABLE功能對錶進行磁碟重組
28)如果資料庫只需要支援一般中文,資料量很大,效能要求很高
那應該選擇GBK(每個漢字只佔2個位元組,而UTF-8需要3個位元組)
能夠減少磁碟I/O、資料庫cache以及網路傳輸的時間從而提高效能。
29)如果應用主要處理英文字元,僅少量漢字資料則選擇UTF-8更好
30)如果資料庫需要大量的比較、排序了麼定長字元集會更好,因為速度更快
31)預存程序和函數的優勢是可以將資料的處理放在資料
伺服器上進行,避免將大量的結果集傳輸給用戶端,檢索資料的傳輸,但是最好不要再預存程序和函數
中進行大量的輔助運算,應該盡量將這些運算分攤到應用伺服器上執行。
31)資料庫中使用Regex:XXX REGEXP "模式"
32)group by with rollup得到更加完整的分組彙總的資訊
33)innodb使用間隙鎖的目的:防止幻讀,滿足其回複和複製的需求
第20章需要多看幾遍
34)mysql錯誤處理選項
-f:強制執行sql,即即使有錯誤,跳過錯誤執行下一條語句。
-v:顯示更多資訊
--show-warning:顯示警告資訊
35)myisampack(myisam表壓縮公用程式),壓縮後表只可讀。
36)mysqlchk可以用來檢查和修複myisam表,
但是innodb不支援用mysqlcheck進行修複。
37)mysqlhotcopy(myisam表熱備份工具)
它只能用於備份myisam並且只能運行在linux/unix環境。
38)perror(錯誤碼查看工具)
用法:
perror 錯誤碼編號
39)replace(文本替換工具)
例子:
覆蓋的方式替換
將檔案a中的a1和b1分別替換成aa1,bb1;
replace a1 aa1 b1 bb1 --a
非覆蓋的方式替換
將檔案a中的a和b分別替換為c和d
replace a c b d <a
40)備份
全備份:
優點是保持最新備份
增量備份:只需要備份每天的增量日誌
但是恢複時需要全備份加上次備份到故障前的所有日誌。
主要要掌握:mysqlhotcopy和手工熱備份的方法。
LOAD DATA INFILE是載入資料最快的方法。
41)如何處理myisam儲存引擎的表損壞
a.用myisamchk -r tablename來進行修複
b.先用check table 表名 來檢查表是否損壞
再用repair table 表名 來修複表
後面還有一點點。。。。to be continued ,其實我的獨佔鎖定和共用鎖定那裡還是糊塗啊,還有主從。。。。。
a long way to go ......
(DBA之路十)《深入淺出MySQL資料庫開發最佳化與管理維護》的讀書筆記