一、數(shù)據(jù)類型
- 整數(shù)類型
- TINYINT
- SMALLINT
- MEDIUMINT
- INT
- BIGINT
- 屬性:UNSIGNED
-
長度:可以為整數(shù)類型指定寬度邻梆,例如:INT(11)守伸、對大多數(shù)應(yīng)用是沒有意義的,它不會限制值的合法范圍确虱,只會影響顯示字符的個數(shù)
- 實數(shù)類型
- FLOAT
- DOUBLE
- DECIMAL
- DECIMAL可存儲比BIGINT還大的整數(shù)含友;可以用于存儲精確的小數(shù)
- FLOAT和DOUBLE類型支持使用標準的浮點進行近視計算
- 字符串類型
- VARCHAR
- CHAR
- TEXT
- BLOB
- VARCHAR類型用于存儲可變長字符串,它比定長類型更節(jié)省空間
- VARCHAR使用1或2個額外字節(jié)記錄字符串的長度校辩,列長度小于255字節(jié)窘问,使用1個字節(jié)表示,否則用2個
- VARCHAR長度宜咒,如果存儲內(nèi)容超出指定長度惠赫,會被截斷
- CHAR是定長的,根據(jù)定義的字符串長度分配足夠的空間
- CHAR會根據(jù)需要采用空格進行填充以方便比較
- CHAR適合 存儲很短的字符串故黑,或者所有值都接近同一個長度
- CHAR長度儿咱,超出設(shè)定的長度,會被截斷
- 對于經(jīng)常變更的數(shù)據(jù)场晶,CHAR比VARCHAR更好混埠,CHAR不容易產(chǎn)生碎片
- 對于非常短的列,CHAR比VARCHAR在存儲空間上更有效率
- 只分配真正的空間诗轻,更長的列會消耗更多的內(nèi)存
- 盡量避免使用BLOB/TEXT類型钳宪,查詢會使用臨時表,導(dǎo)致嚴重的性能開銷
- 枚舉
- 有時可以使用枚舉代替常用的字符串類型
- 把不重復(fù)的集合存儲成一個預(yù)定義的集合
- 非常緊湊,把列表值壓縮到一個或兩個字節(jié)
- 內(nèi)部存儲的是整數(shù)
- 盡量避免使用數(shù)字作為ENUM枚舉的常量吏颖,易混亂
- 排序是按照內(nèi)部存儲的整數(shù)進行排序
- 枚舉表會使表大小大大減小
- 日期和時間類型
- 盡量使用TIMESTAMP搔体,比DATETIME空間效率高
- 用整數(shù)保存時間戳的格式通常不方便處理
- 如果需要存儲微妙,可以使用bigint存儲
- 列屬性
- auto_increment
- default
- not null
- zerofill
二半醉、MySQL基礎(chǔ)操作
- 常見操作
- MySQL的連接和關(guān)閉Lmysql -u -p -h -P
- 其他:\G(打印結(jié)果垂直顯示)疚俱、\c(取消當前mysql的命令)、\q(退出mysql)缩多、\s(顯示mysql服務(wù)器狀態(tài))呆奕、\h(幫助信息)、\d(改變執(zhí)行服務(wù))
三瞧壮、MySQL數(shù)據(jù)表引擎
- InnoDB表引擎(優(yōu)先選擇)
- 默認事務(wù)型引擎登馒,最重要最廣泛的存儲引擎,性能非常優(yōu)秀
- 數(shù)據(jù)存儲在共享表空間咆槽,可以通過配置分開
- 對主鍵查詢的性能高于其他類型的存儲引擎
- 內(nèi)部做了很多優(yōu)化陈轿,從磁盤讀取數(shù)據(jù)時自動在內(nèi)存構(gòu)建hash索引,插入數(shù)據(jù)時自動構(gòu)建插入緩沖區(qū)
- 通過一些機制和工具支持真正的熱備份
- 支持崩潰后的安全恢復(fù)
- 支持行級鎖
- 支持外鍵
- MyISAM表引擎
- 5.1版本前秦忿,MyISAM是默認的存儲引擎
- 擁有全文索引麦射、壓縮、空間函數(shù)
- 不支持事務(wù)和行級鎖灯谣,不支持崩潰后的安全恢復(fù)
- 表存儲在兩個文件潜秋,MYD(數(shù)據(jù))和MYI(索引)
- 設(shè)計簡單,某些場景下性能很好
- 其他表引擎
- Archive
- Blackhole
- CSV
- Memory
四胎许、MySQL鎖機制
- 概念:表鎖是日常開發(fā)當中常見的問題峻呛,當多個查詢同一時刻進行數(shù)據(jù)修改時,就會產(chǎn)生并發(fā)控制的問題
- 共享鎖和排它鎖辜窑,也就是讀鎖和寫鎖
- 讀鎖:共享的钩述,不堵塞,多個用戶可以同時讀一個資源穆碎,互不干擾
- 寫鎖:排他的牙勘,一個寫鎖會阻塞其他的寫鎖和讀鎖,這樣可以只允許一個人進行寫入所禀,防止其他用戶讀取正在寫入的資源
- 鎖粒度
- 表鎖方面,系統(tǒng)性能開銷最小,會鎖定整張表色徘,MyISAM使用表鎖
- 行鎖恭金,最大程度地支持并發(fā)處理,但是也帶來了最大的鎖開銷褂策,InnoDB實現(xiàn)行級鎖
五蔚叨、MySQL事務(wù)處理
- MySQL提供事務(wù)處理的表引擎义黎,InnoDB
- 服務(wù)器層不管理事務(wù)育勺,由下層的引擎實現(xiàn),所以同一個事務(wù)中怀浆,使用多種存儲引擎不靠譜
- 在非事務(wù)的表上 執(zhí)行事務(wù)操作MySQL不會發(fā)出提醒扬蕊,也不會報錯
六搀别、MySQL存儲過程
- 存儲過程
- 為以后的使用而保存的一條或多條MySQL語句的集合
- 存儲過程就是有業(yè)務(wù)邏輯和流程的集合
- 可以在存儲過程中創(chuàng)建表,更新數(shù)據(jù)尾抑,刪除等等
- 使用場景
- 通過把處理封裝在容易使用的單元中歇父,簡化復(fù)雜的操作
- 保證數(shù)據(jù)的一致性
- 簡化對變動的管理
七、MySQL觸發(fā)器
- 觸發(fā)器
- 提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法再愈,它是與表事件相關(guān)的特殊的存儲過程
- 使用場景
- 可通過數(shù)據(jù)庫中的相關(guān)表實現(xiàn)級聯(lián)更改
- 實時監(jiān)控某張表中的某個字段的更改而需要做出相應(yīng)的處理
- 某些業(yè)務(wù)編號的生成等
- 濫用會造成數(shù)據(jù)庫及應(yīng)用程序的維護困難