1. 程式人生 > >Mysql資料庫基礎考點

Mysql資料庫基礎考點

請寫出下面Mysql資料型別表達的意義(int(0) 0代表的是寬度、char(16)、varchar(16)、datetime、text) 這是mysql資料型別

答:int 0是寬度 他是個整形   char是一個定長的儲存字串的型別 他定長16、varchar可變長的字串,長度也是16、datetime儲存時間日期的、text儲存一些大文字資料的

 

整數型別: TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 配合屬性:UNSIGNED 非負

長度:可以為整數型別制定寬度,例如:INT(11)、對大多數int是沒有意義的,它不會限制值得合法範圍,只會影響顯示字元的個數。 也就是說  定義一個int 11 的型別,不代表存的只能代表11位 ,而這個11是顯示的寬度,並不會影響他的取值範圍。

 

實數型別

FLOAT、DOUBLE、DECIMAL

DECIMAL可儲存比BIGINT還大的整數;可以用於儲存精確的小數,對於DECIMAL的話 無論你的小數點是後幾位,它都可以給你儲存。

FLOAT和DOUBLE型別都是有取值範圍的,但是他們都支援使用標準的浮點進行近似計算的對於計算來說 FLOAT和DOUBLE效率會比較高

 

字串型別

VARCHAR、CHAR、TEXT、BLOB

VARCHAR型別用於儲存可變長字串,它比定長型別更節省空間

VARCHAR使用1或2額外位元組記錄字串的長度,列長度小於255位元組的時候,使用1個位元組表示,否則使用2個。

VARCHAR長度,如果儲存內容超出制定長度,會被階段, 如果超出的話 會給你截一半 有的版本還會報錯

VARCHAR的變長是隻會往小縮,而不會去變長。

CHAR是定長的,根據定義的字串長度分配足夠的空間

CHAR會根據需要此阿勇空格進行填充以方便比較 比如我現在定義的是CHAR(5) 但是我添了三個字串的話,其他兩個會用空格補充。

CHAR適合儲存很短的字串,或者所有值都接近同一個長度的值。

CHAR長度、超出設定的長度也會被截斷。

對於經常變成的資料,CHAR比VARCHAR更好,CHAR不容易產生碎片

對於非常短的列,CHAR比VARCHAR在村粗空間上更有效率 值分配真正需要的空間,更長的列會消耗更多的記憶體,不要去寫太長 一般情況下我們寫5到10位的話 我們寫個255的話會消耗很多記憶體

儘量避免使用BLOB/TEXT型別,查詢會使用臨時表,導致嚴重的效能開銷。

列舉  

有時候可以使用列舉代替常用的字串型別

把不重複的集合儲存成一個預定義的集合  

非常緊湊,把列表值壓縮到一個或兩個位元組  

內部儲存的是整數

儘量避免使用數字作文ENUM列舉的常量,易混亂

排序是按照內部儲存的整形進行排序

列舉表會使表大小大大減少,因為他裡面儲存的是整形

日期和時間型別

儘量使用TIMESTAMP,比DATETIME空間效率高

用煮熟儲存時間戳的格式通常不方便處理

如果需要儲存微妙,可以使用bigint儲存

列屬性

Auto_increment、default、not null、zerofill

延伸考點:Mysql基礎操作

常見操作: 1.mysql的連線和關閉: mysql -u -p -h -P    -u指定使用者名稱 -p指定密碼 -h指定主機 -P指定埠    其他: \G  \c  \q  \s  \h  \d  \G代表的使我們把列印的結果可以垂直顯示  \c 取消當前的mysql命令  \q 退出mysql  \s 顯示我們現在伺服器的狀態  \h 幫助資訊 \d該表我們的執行符號 比如改;號之類得

 

Mysql資料表引擎

InnoDB表引擎 1.預設事務型引擎,最重要最廣泛得儲存引擎,效能非常優秀

  1. 資料儲存在共享表空間,可以通過配置分開 他們得索引啊什麼啊都在一個表裡存著
  2. 對主鍵查詢得效能高於其他型別得儲存引擎
  3. 內部做了很多優化,從磁碟讀取資料時自動在記憶體構建hash(雜湊)索引,插入資料時自動構建插入緩衝區
  4. 通過一些機制和工具支援真正得熱備份
  5. 支援崩潰後得安全恢復
  6. 支付行級鎖
  7. 支援外來鍵

MyISAM表引擎

  1. 5.1版本前,MyISAM是預設得儲存引擎
  2. 擁有全文索引,壓縮,空間函式
  3. 不支援事務和行級鎖,不支援崩潰得安全恢復,這裡可以看出來他並沒有InnoDB安全。
  4. 表儲存有三個檔案,索引檔案,資料檔案,表結構檔案 所以跨平臺很難直接被壓縮
  5. 設計簡單,某些場景下效能很好  獲取整個表裡得資料大小得話 效率很搞

 

其他表引擎: Archive、CSV、Memory、Blackhole、BDB

優先選擇InnoDB 因為他的效能還是十分優秀的

 

Mysql的鎖機制

共享鎖和排他鎖,其實就是讀鎖和寫鎖

讀鎖的話是共享的,不堵塞,多個使用者可以同時讀一個資源,互不干擾

寫鎖的話是排他的,一個寫鎖會阻塞其他的寫鎖和讀鎖,這樣可以只允許一個人進行寫入,防止其他使用者讀取正在寫入的資源。

鎖力度, 表鎖,系統性能開銷最小,會鎖定整張表,MyISAM使用表級鎖

行鎖,最大程度地支援併發處理,但是也帶來了最大的鎖開銷,InnoDB實現行級鎖

事務處理

Mysql提供事物處理的表引擎,InnoDB伺服器層不管理事務,由下層的引擎實現,所以同一個事務中,使用多種儲存引擎不靠譜

在非實物的表上執行事物操作Mysql不會發出提醒,也不會報錯

在做事務的時候,我們一定要先檢查自己的表 是不是InnoDB

 

儲存過程

為以後的使用而儲存一條或多條Mysql語句的集合 儲存過程就是有業務邏輯和流程的集合,可以在儲存過程中建立表,更新資料,刪除等等。

儲存過程的使用場景

通過把資料封裝在容易使用的單元中,簡化複雜的操作。

保證資料的一致性

簡化對變動的管理

 

Mysql觸發器

提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表時間相關的特殊的儲存過程。

Mysql觸發器的使用場景

可通過資料庫中的相關表實現級聯更改

實時監控某張表的某個欄位的更改而需要作出相應的處理

某些業務編號的生成等

濫用會造成資料庫及應用程式的維護困難

 

真題

說明表儲存引擎InnoDB和MyIsam的區別