Mysql學習筆記(一)

      技術的王國太過迷人,我剛從事IT就被各類技術所引誘迷惑,什麼都想學。我還算言而有信的那一類人,還好有一丁點毅力,因而各類東西都沾染了一點。可是這種遍地開花的狀況實在和個人智商不匹配。我沒有那麼多的精力去學那麼多的東西。慢慢的要學會暫時放棄一些技術,先深化學習本身工做中要用到的東西。好比mysql等。對於本身特別喜歡的東西,好比linux,由於太太高深和複雜。我又不想放棄,那麼就天天分給linux一個小時的時間,熟悉下命令,徐徐漸進。等我賴以生存的各類技能比較完善後,我想能夠抽出大量的時間去研究linux了。mysql

      我是一邊看書一邊敲栗子的,書名是《MySQL核心技術與最佳實踐》。一邊學習,看到有用的東西就隨手記下來,所以筆記必定會顯得有些凌亂。有些知識點之前我就已經掌握了,可能我就不會往上面寫了。這僅僅是一篇自我學習的筆記而已,因此你看到這裏就能夠止步了,我不想浪費你的學習時間。linux

InnoDB引擎與MyISAM引擎sql

       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值。

相關文章
相關標籤/搜索