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