技術的王國太過迷人,我剛從事it就被各種技術所引誘迷惑,什么都想學。我還算言而有信的那一類人,還好有一丁點毅力,于是各種東西都沾染了一點。但是這種遍地開花的情況實在和我的智商不匹配。我沒有那么多的精力去學那么多的東西。慢慢的要學會暫時放棄一些技術,先深化學習自己工作中要用到的東西。比如mysql等。對于自己特別喜歡的東西,比如linux,因為太過高深和復雜。我又不想放棄,那么就每天分給linux一個小時的時間,熟悉下命令,徐徐漸進。等我賴以生存的各種技能比較完善后,我想可以抽出大量的時間去研究linux了。
? ? ? 我是一邊看書一邊敲栗子的,書名是《mysql核心技術與最佳實踐》。一邊學習,看到有用的東西就隨手記下來,因此筆記一定會顯得有些凌亂。有些知識點以前我就已經掌握了,可能我就不會往上面寫了。這僅僅是一篇自我學習的筆記而已,所以你看到這里就可以止步了,我不想浪費你的學習時間。
InnoDB引擎與MyISAM引擎
? ? ? ?mysql是關系型數據庫。其中的存儲引擎可以show engines來查看。我的版本是5.6.26的,查看版本用select version() 來查看。5.6.26的mysql有9種存儲引擎。其中最常見最老生常談的也就是MyISAM 與InnoDB。如果業務上是非事物(transcation)的那么這兩種存儲引擎都差不多,在性能上沒什么差別。如果業務中需要大多數的select查詢,那么可以用MyISAM存儲引擎。如果是需要事物,則需要用回InnoDB存儲。
MySQL的備份
????? 備份的時候為了避免數據不一致的情況,再數據庫備份期間,不允許對數據庫進行寫操作。
????? 可以用 flush tables with read lock;
? ? ? 現將內存中的表數據掃描恢復到表里面。然后鎖定表。同事給予讀權限。也就是說在數據庫備份的時候,還是有讀權限的。
? ? ? 等數據庫的備份操作完成之后,然后對數據庫解鎖。tables unlock;
MySQL數據類型
? ? ? 書本上這個數據類型結構圖畫的挺好的,到網上搜了一下,都花的不好看。于是還是自己畫一個吧,用不了多長時間。
麻蛋,我的畫圖工具壞了,我就總結個知識,何苦呢。
下面還是文字吧,文字來的快,省力。
小數類型分為精確小數類型和浮點小數類型。
小數類型包括decimal精確類型。
浮點小數,包括單精度和雙精度。(這個我也不知道是啥意思,有興趣的百度之吧,比較常用的是decimal)。’
decimal(length, precision) 。lengh表示這個數總共有多長,precision表示小數點后有多長。
MySQL的字符串類型
MySQL主要支持六種字符串類型,char , varchar, tinyintm, text, mediumtext, longtext.
在字符串的類型上面我以前認識不清。犯過許多錯誤。看過書,然后實驗后,就明白了許多。
以下內容直接引用《MySQL 核心技術與最佳實踐》第三章節。
? ?char(n) 是定長字符串類型, 表示占用n個字符(注意不是字節)的存儲空間,n的最大值為255.例如,對于中文簡體字符集gbk編碼來說,char(255)表示可以存儲255個漢字,而每個漢字占用兩個字節的存儲空間。對于一個utf8字符集的字符串而言,char(255)表示可以存儲255個漢字,而每個漢字占用3個字節的存儲空間。
? ?varchar(n)為變長字符串類型,這就意味著此類字符串占用的存儲空間就是字符串自身占用的存儲空間,與n無關。這與char(n)不同,這與char(n)不同。例如對于中文簡體字符集gbk的字符串而言,varchar(255)表示可以存儲255個漢字。而每個漢字占用兩個字節的存儲空間。假若這個字符串沒有那么多的漢字,例如僅僅包括一個“中”字,那么varchar(255)僅僅占用一個字符(2個字節)的存儲空間,如果不考慮其他開銷。而char(255) 必須占用255個字符長度的存儲空間,哪怕里面只存儲一個漢字。
? ? ?各種字符類型占用的存儲空間:
MySQL的日期類型
? ? ??MySQL主要支持5中日期類型。date, time,year,datetime,timestamp。
? ? ? ?date類型。格式支持年月日。YYYY—MM—DD;
? ? ? ?time類型。時分秒。 ? ? ? ? ? HH:ii:ss。
? ? ? ?datetime ?是date與time的結合體。也就是年月日。時分秒了。
? ? ? ?timestamp 和datetime差不多。
?
可是學習上不能講究差不多。我們還是來看下timestamp與datetime的區別吧。
? ? ? ?表示的取值范圍不同,datetime的取值范圍遠遠大于timestamp的取值范圍。timestamp到2037年就玩完了。
? ? ? ?如果timestamp不賦值,那么該字段值的值實際上是mysql服務器當前的日期和時間。
? ? ? ?對同一個timestamp類型的日期或者時間。不同的失去顯示的結果不同。使用MySQL命令show varialbes like “time_zone” 可以會顯示如下的信息。
? ? 這個SYSTEM就表示用的是系統的時間。
? ? ? ?當對包含timestamp數據的記錄進行修改是,timestamp數據將自動更新為mysql服務器當前的日期和時間。
?
? ? ?MySQL二進制類型
我應該不會在MySQL數據庫存二進制的數據類型,至少目前不會涉及。只了解一下mysql可以存二進制數據,我想就夠了。以后有需要再回來研究。
? ? ??
一點感悟:
? ? ? (1)在符合應用要求(取值范圍 精度)的情況下,盡量使用短的的數據類型。
? ? ? ?(2) 數據類型越簡單越好。
? ? ? ?(3)盡量采用精確的小數類型。
? ? ? ? (4)盡量用內置的日期和時間數據類型,而不是用字符串來存儲日期和時間。
? ? ? ? (5) 盡量避免null字段,建議將字段指定為not null 約束。這是由于,在mysql中含有空值的列很難進行查詢優化,null值會是索引的統計信息以及比較優化運算變得更加復雜。推薦使用0,一個特殊的值或者一個空字符串代替null值。
?
本人博客所有文章,均為原創。部分文章中或引用相關資料,但均已著明來源出處。可隨意轉載、分享,但需加本文鏈接,以及版權說明。
?以上就是Mysql學習筆記(一)的內容,更多相關內容請關注PHP中文網(www.php.cn)!?