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.預設事務型引擎,最重要最廣泛得儲存引擎,效能非常優秀
- 資料儲存在共享表空間,可以通過配置分開 他們得索引啊什麼啊都在一個表裡存著
- 對主鍵查詢得效能高於其他型別得儲存引擎
- 內部做了很多優化,從磁碟讀取資料時自動在記憶體構建hash(雜湊)索引,插入資料時自動構建插入緩衝區
- 通過一些機制和工具支援真正得熱備份
- 支援崩潰後得安全恢復
- 支付行級鎖
- 支援外來鍵
MyISAM表引擎
- 5.1版本前,MyISAM是預設得儲存引擎
- 擁有全文索引,壓縮,空間函式
- 不支援事務和行級鎖,不支援崩潰得安全恢復,這裡可以看出來他並沒有InnoDB安全。
- 表儲存有三個檔案,索引檔案,資料檔案,表結構檔案 所以跨平臺很難直接被壓縮
- 設計簡單,某些場景下效能很好 獲取整個表裡得資料大小得話 效率很搞
其他表引擎: Archive、CSV、Memory、Blackhole、BDB
優先選擇InnoDB 因為他的效能還是十分優秀的
Mysql的鎖機制
共享鎖和排他鎖,其實就是讀鎖和寫鎖
讀鎖的話是共享的,不堵塞,多個使用者可以同時讀一個資源,互不干擾
寫鎖的話是排他的,一個寫鎖會阻塞其他的寫鎖和讀鎖,這樣可以只允許一個人進行寫入,防止其他使用者讀取正在寫入的資源。
鎖力度, 表鎖,系統性能開銷最小,會鎖定整張表,MyISAM使用表級鎖
行鎖,最大程度地支援併發處理,但是也帶來了最大的鎖開銷,InnoDB實現行級鎖
事務處理
Mysql提供事物處理的表引擎,InnoDB伺服器層不管理事務,由下層的引擎實現,所以同一個事務中,使用多種儲存引擎不靠譜
在非實物的表上執行事物操作Mysql不會發出提醒,也不會報錯
在做事務的時候,我們一定要先檢查自己的表 是不是InnoDB
儲存過程
為以後的使用而儲存一條或多條Mysql語句的集合 儲存過程就是有業務邏輯和流程的集合,可以在儲存過程中建立表,更新資料,刪除等等。
儲存過程的使用場景
通過把資料封裝在容易使用的單元中,簡化複雜的操作。
保證資料的一致性
簡化對變動的管理
Mysql觸發器
提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表時間相關的特殊的儲存過程。
Mysql觸發器的使用場景
可通過資料庫中的相關表實現級聯更改
實時監控某張表的某個欄位的更改而需要作出相應的處理
某些業務編號的生成等
濫用會造成資料庫及應用程式的維護困難
真題
說明表儲存引擎InnoDB和MyIsam的區別