mysql數(shù)據(jù)庫基礎考點
char和 varchar的區(qū)別
innodb? myisam的區(qū)別
請寫出下面 mysql數(shù)據(jù)類型表達的意義
int(0)? 寬度為0的整型
char(16)定長字符串 長度為16位
varchar(16) 可變字符串 長度16位
datetime 時間日期
text 字符串 大文本數(shù)據(jù)
mysql的數(shù)據(jù)類型
整數(shù)類型
tinyint
smallint
mediumint
int
bigint
屬性 unsigned? 非負
長度:可以為整數(shù)類型只能寬度? 例如 int(11),對大多數(shù)應用是沒有意義的,它不會限制值的合法范圍,只會影響顯示字符的個數(shù)
12
zrofill 0填充不指定不填充
int(3)? 012
int(5)? 00012
可以存入 1234
實數(shù)類型
float? double? decimal
decimal可存儲比 bigint還大的整數(shù),可以用于存儲精確的小數(shù)
float和? double類型 支持使用標準的浮點進行近似計算
字符串類型
varchar
用于存儲可變長字符串,它比訂場類型更接受省空間
使用1或者兩個額外字節(jié)記錄字符串的長度,列長度小于255字節(jié) 使用一個字節(jié)表示,否則用2個
如果存儲內容超出指定長度,會被截斷 有的版本會報錯
可變只會往小了縮不會往大了擴
char
定長的,根據(jù)定義的字符串長度分配足夠的弓箭
會根據(jù)需要采用空格進行填充以后方便比較
適合存儲很短的字符串,或者所有值都接近同一個長度 如加密后的密碼
長度,超出設定長度會被截斷
區(qū)別 注意
對于經(jīng)常變更的數(shù)據(jù),char比varchar更好,char不容易產(chǎn)生碎片
對于非常短的列,char比varchar在存儲空間上更有效率
只分配真正需要的空間,更長的列會消耗更多的內存
盡量避免使用 blob/text類型,查詢會使用臨時表,導致嚴重的性能開銷
text
blob
枚舉
有時可以使用枚舉代替常用的字符串類型
把不重復的集合存儲成一個預定義的集合
非常緊湊,把列表值壓縮到一個或兩個字節(jié)
內部存儲的是整數(shù)
盡量避免使用數(shù)字作為ENUM枚舉的常量,易混亂
排序是按照表內部存儲的整數(shù)進行排序
枚舉表會使表大小大大減小
日期和時間類型
盡量使用 timestamp,比datetime空間效率高
用整數(shù)保存時間戳的格式通常不方便處理
如果需要存儲微秒,可以使用bigint存儲
列屬性
auto_inicrement
default
not null
zerofill
mysql的基礎操作
mysql的鏈接和關閉
mysql
-u 用戶名
-p? 密碼
-h? ? 主機
-P 端口
其他
\G 把打印結果垂直顯示
\c 取消當前mysql命令
\q 退出 mysql
\s myslq服務器狀態(tài)
\h 幫助信息
\d 改變執(zhí)行服務
mysql數(shù)據(jù)表引擎
innodb 默認的事務性 引擎 最重要最廣泛的存儲引擎 ,性能非常優(yōu)秀
數(shù)據(jù)存儲在共享表空間 可以通過配置分開
對主鍵查詢的性能高于其他類型的數(shù)據(jù)引擎
內部做了很多優(yōu)化,從磁盤讀取數(shù)據(jù)時自動在內存構建hash索引,插入數(shù)據(jù)時自動構建插入緩沖區(qū)
通過一些機制和工具支持真正的熱備份
支持崩潰后的安全恢復
支持行級鎖
支持外鍵
myIsam
5.1版本前 是默認的存儲引擎
擁有全文索引 壓縮 和空間函數(shù)
不支持事務 和行級鎖,不支持崩潰后的安全回復
設計簡單,某些場景下性能很好
表存儲在兩個文件 myd myi
其他存儲引擎
archive? blackhole? csv memory
優(yōu)先選擇 innodb
mysql的鎖機制
當多個查詢同一時刻進行數(shù)據(jù)修改時,就會產(chǎn)生并發(fā)控制的問題
共享鎖 和排它鎖? 其實就是讀鎖和寫鎖
讀鎖
共享的,不堵塞,多個用戶可以同時讀一個資源,互不干擾
寫鎖
排它的,一個寫鎖會阻塞其他的寫鎖和讀鎖,這樣可以只允許一個人進行寫入,防止其他用戶讀取正在寫入的資源
鎖粒度
表鎖,系統(tǒng)性能開銷最小,會鎖定整張表,myIsam使用表鎖,
行鎖,最大程度的支持并發(fā)處理,但是也帶來了最大的鎖開銷,innodb實現(xiàn)行級鎖
mysql事務處理 存儲過程 觸發(fā)器
事務處理
mysql提供事務處理的表引擎,innodb
服務器不管理事務,由下層的引擎實現(xiàn),所以同一個事務中,使用多種存儲引擎不靠譜
在非事務的表上執(zhí)行事務操作mysql不會發(fā)出提醒也不會報錯
存儲過程
為以后的使用而保存的一條或者多條mysql語句的集合
存儲過程就是有業(yè)務邏輯和流程的集合
可以在存儲過程中創(chuàng)建表,更新數(shù)據(jù),刪除等等
場景
通過把處理封裝在容易使用的單元中,簡化復雜的操作
保證對數(shù)據(jù)的一致性
簡化對變動的管理
觸發(fā)器
提供給程序員和數(shù)據(jù)分析 員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關的特殊的存儲過程
使用場景
可通過數(shù)據(jù)庫中相關表實現(xiàn)級聯(lián)更改
實時監(jiān)控某張表中的某個字段的更改而需要作出相應的處理
某些業(yè)務編號的生成等
濫用會造成數(shù)據(jù)庫及應用程序的維護困難