總結(jié)一下了最近看的書(shū),結(jié)合面試中經(jīng)常問(wèn)到的問(wèn)題喷鸽,記錄一下,以便自己以后能溫故而知新灸拍。知識(shí)點(diǎn)順序比較雜亂做祝,看到哪就記錄到哪。
從本質(zhì)上講鸡岗,數(shù)據(jù)庫(kù)系統(tǒng)不過(guò)就是一套對(duì)大量信息數(shù)據(jù)進(jìn)行管理的高效管理辦法而已混槐。
使用數(shù)據(jù)庫(kù)系統(tǒng)能帶來(lái)的優(yōu)勢(shì)主要有以下幾點(diǎn):
1、快速記錄和靈活快捷的檢索轩性。
2声登、靈活的輸出格式,比如支持報(bào)表打印、作為其他程序的數(shù)據(jù)輸入悯嗓、匯總信息等等
3件舵、信息資料能共享
數(shù)據(jù)庫(kù)就是用來(lái)存放信息的倉(cāng)庫(kù),結(jié)構(gòu)簡(jiǎn)單脯厨,遵守一定的規(guī)則:
1芦圾、數(shù)據(jù)庫(kù)里的數(shù)據(jù)集合都存放在數(shù)據(jù)表(Table)里
2、數(shù)據(jù)表由數(shù)據(jù)行和數(shù)據(jù)列構(gòu)成
3俄认、一個(gè)數(shù)據(jù)行就是數(shù)據(jù)表里的一條記錄
MySQL的體系結(jié)構(gòu):
mysql采用的就是客戶服務(wù)器結(jié)構(gòu)个少。當(dāng)你使用mysql的時(shí)候,你實(shí)際上是在使用兩個(gè)程序眯杏。第一個(gè)是MySQL服務(wù)器程序夜焦,指的是mysqld程序,運(yùn)行在存放著你數(shù)據(jù)庫(kù)的服務(wù)器上岂贩。它負(fù)責(zé)在網(wǎng)絡(luò)上監(jiān)聽(tīng)并處理來(lái)自客戶的服務(wù)請(qǐng)求茫经,根據(jù)這些請(qǐng)求去訪問(wèn)數(shù)據(jù)庫(kù)的內(nèi)容,再把有關(guān)信息回傳給客戶萎津。第二個(gè)程序就是MySQL客戶程序卸伞,負(fù)責(zé)連接到數(shù)據(jù)庫(kù)服務(wù)器,并通過(guò)向服務(wù)器發(fā)出查詢命令來(lái)告知它們需要哪些信息锉屈。
這個(gè)客戶服務(wù)器體系結(jié)構(gòu)好處:
1荤傲、并發(fā)控制由服務(wù)器提供,因此不會(huì)出現(xiàn)兩個(gè)用戶同時(shí)修改同一記錄的想象颈渊。
2遂黍、你不必非得在存放著你的數(shù)據(jù)庫(kù)的那臺(tái)機(jī)器上登錄。
MySQL數(shù)據(jù)里面的NULL值
NULL是一個(gè)特殊的值俊嗽,不能用來(lái)與有數(shù)據(jù)的值進(jìn)行運(yùn)算或者比較雾家。如果需要對(duì)NULL值進(jìn)行查找,不能使用!=绍豁、<>芯咧、=來(lái)測(cè)試它們是否相等,必須使用is NULL或者is NOT NULL來(lái)判斷竹揍。如果設(shè)定按升序排序敬飒,它們將出現(xiàn)在查詢結(jié)果的開(kāi)頭,按降序排序鬼佣,則會(huì)出現(xiàn)在查詢結(jié)果的結(jié)尾驶拱。
count(*)和count(字段)的區(qū)別:
count(*) 查出來(lái)的是:結(jié)果集的總條數(shù)
count(字段名) 查出來(lái)的是: 結(jié)果集中‘字段名’不為空的記錄的總條數(shù)
char和varchar的區(qū)別:
(1) char的長(zhǎng)度是不可變的;
? ?而varchar的長(zhǎng)度是可變的霜浴,也就是說(shuō)晶衷,定義一個(gè)char[10]和varchar[10],如果存進(jìn)去的是‘csdn’,那么char所占的長(zhǎng)度依然為10,除了字符‘csdn’外,后面跟六個(gè)空格晌纫,而varchar就立馬把長(zhǎng)度變?yōu)?了税迷,取數(shù)據(jù)的時(shí)候,char類型的要用trim()去掉多余的空格锹漱,而varchar是不需要的箭养,盡管如此,char的存取數(shù)度還是要比varchar要快得多哥牍,因?yàn)槠溟L(zhǎng)度固定毕泌,方便程序的存儲(chǔ)與查找;但是char也為此付出的是空間的代價(jià)嗅辣,因?yàn)槠溟L(zhǎng)度固定撼泛,所以難免會(huì)有多余的空格占位符占據(jù)空間,可謂是以空間換取時(shí)間效率澡谭,而varchar是以空間效率為首位的愿题。
??? (2)char的存儲(chǔ)方式是,對(duì)英文字符(ASCII)占用1個(gè)字節(jié)蛙奖,對(duì)一個(gè)漢字占用兩個(gè)字節(jié)潘酗;而varchar的存儲(chǔ)方式是,對(duì)每個(gè)英文字符占用2個(gè)字節(jié)雁仲,漢字也占用2個(gè)字節(jié)仔夺,兩者的存儲(chǔ)數(shù)據(jù)都非unicode的字符數(shù)據(jù)。
delete與drop的區(qū)別:
DELETE?
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROMtbl_name[PARTITION (partition_name,...)]? ? [WHEREwhere_condition]? ? [ORDER BY ...]? ? [LIMITrow_count]
delete是DML攒砖,執(zhí)行delete操作時(shí)囚灼,每次從表中刪除一行,并且同時(shí)將該行的的刪除操作記錄在redo和undo表空間中以便進(jìn)行回滾(rollback)和重做操作祭衩,但要注意表空間要足夠大灶体,需要手動(dòng)提交(commit)操作才能生效,可以通過(guò)rollback撤消操作掐暮。
有where條件刪除where條件中所限制的數(shù)據(jù)蝎抽;沒(méi)有where條件則刪除所有的數(shù)據(jù)
如果有order by從句,則根據(jù)order by的排序順序依次刪除路克,如果有l(wèi)imit 從句則只刪除limit限制的數(shù)量
執(zhí)行速度最慢樟结,但是安全性最高
DROP
DROP [TEMPORARY] TABLE [IF EXISTS]tbl_name[,tbl_name] ...? ? [RESTRICT | CASCADE]
直接刪除表結(jié)構(gòu)的文件和數(shù)據(jù)文件,執(zhí)行速度最快