? ? 好久不見诬烹,未曾想念砸烦。今天來聊聊數(shù)據(jù)庫基礎(chǔ)的學(xué)習(xí),以MySQL數(shù)據(jù)庫為對象绞吁,記錄其概念與語法幢痘。
? ? 數(shù)據(jù)庫,顧名思義掀泳,即用于存儲數(shù)據(jù)的倉庫雪隧。世面上主要的關(guān)系型數(shù)據(jù)庫有MySQL西轩、Oracle员舵、sql server、db2藕畔、sqlite马僻,其數(shù)據(jù)以表格形式存放。如今也有不基于SQL(結(jié)構(gòu)化查詢語言)的NoSQL數(shù)據(jù)庫注服,即not only sql韭邓,其中包括鍵值(Key-Value)存儲的數(shù)據(jù)庫,列存儲數(shù)據(jù)庫溶弟,文檔型數(shù)據(jù)庫等女淑。這些并不是今天的主角,接下來就讓我們把聚光燈打到主角MySQL的方位辜御。
? ? MySQL是一個開源免費的數(shù)據(jù)庫鸭你,也因此是互聯(lián)網(wǎng)領(lǐng)域最常用的數(shù)據(jù)庫。2008年sun公司以10億美金收購了MySQL擒权,而一年后袱巨,sun又被Oracle收購。這樣一來碳抄,也就存在一個問題愉老,即MySQL被Oracle收購后,存在閉源風(fēng)險剖效。各大開源社區(qū)漸漸不再支持MySQL嫉入,而轉(zhuǎn)向支持Mariadb的開發(fā)。而Mariadb是何許人也呢璧尸?它是MySQL聯(lián)合創(chuàng)始人Monty Widenius提供的MySQL分支咒林。據(jù)知情人士透露,阿里投資Mariadb將近3000萬逗宁,并將自己開發(fā)的數(shù)據(jù)庫新功能映九,免費貢獻給Mariadb。
? ? 了解了MySQL的發(fā)展歷程后瞎颗,我們記錄一下MySQL命令行客戶端的使用件甥。
? ? 1捌议、連接登錄本機MySQL服務(wù)器:mysql -uroot -p ∫校回車后瓣颅,在命令行輸入密碼即可進入服務(wù)器。
? ? 2譬正、退出客戶端宫补,斷開與服務(wù)器的連接使用exit或者\q命令。
? ? 3曾我、顯示數(shù)據(jù)庫列表可以使用show databases或者show schemas粉怕。而要進入數(shù)據(jù)庫則使用use 數(shù)據(jù)庫名,顯示數(shù)據(jù)庫中包含的列表使用show tables命令抒巢。
? ? 4贫贝、MySQL用戶由“用戶名+IP地址”來標識,故用戶可用create user '用戶名'@'ip地址' identified by '密碼' 命令來創(chuàng)建蛉谜。創(chuàng)好用戶后稚晚,給用戶授予全部權(quán)限grant all privileges on *.* to '用戶名'@'ip地址'。刪除用戶則用戶則使用drop user '用戶名'@'ip地址'型诚。
? ? 5客燕、MySQL對數(shù)據(jù)庫進行管理,常用的有以下幾類狰贯。在創(chuàng)建數(shù)據(jù)庫時指定數(shù)據(jù)庫編碼:create database 庫名 charset=utf8也搓。相應(yīng)的對數(shù)據(jù)庫的修改也就只能修改它的默認字符編碼,如alter database 庫名 charset gbk暮现。刪除庫則較為簡單还绘,只需drop database 庫名,就以刪除栖袋。但是一旦刪除拍顷,會將改庫中的所有數(shù)據(jù)表刪除,且不可恢復(fù)塘幅。
? ? 6昔案、對于數(shù)據(jù)表來說,創(chuàng)建表時电媳,除了要確定字段以外踏揣,還需要確定數(shù)據(jù)庫存儲引擎和字符集。若表的字符集不明確標定匾乓,將隨數(shù)據(jù)庫的字符集捞稿。除對數(shù)據(jù)表的創(chuàng)建刪除以外,更應(yīng)該注意對數(shù)據(jù)表的修改。
? ? 截斷表可理解為重建表娱局,會先刪除數(shù)據(jù)表彰亥,而后重新創(chuàng)建一個和原來字段相同的表,只是表格中的具體數(shù)據(jù)會被清空衰齐,也是不可恢復(fù)的任斋。截斷表的命令為:truncate table 表名。若要修改表名耻涛,使用rename table 舊表名 to 新表名废酷。而修改表的參數(shù)(存儲引擎,編碼)使用alter table 表名? engine=myisam? charset=gbk抹缕。
? ? 7澈蟆、關(guān)于字段的操作,主要明白幾個關(guān)鍵的字就行歉嗓。添加字段會使用到add丰介,以及在指定位置時會使用到first和after背蟆。若要修改字段名和字段類型鉴分,則會使用到change和modify,將其與after和first結(jié)合則可以用來修改字段在表中的位置带膀。刪除字段則需要用drop column 字段名來實現(xiàn)志珍。
? ? 8、在一個表中垛叨,字段的字節(jié)量總合不超過65535個字節(jié)伦糯。字段的字節(jié)量則由修飾字段的類型決定。只要字段中有一個字段允許取null嗽元,則總字節(jié)量中需分配一個字節(jié)來給null值敛纲。
? ? 在MySQL里,數(shù)據(jù)類型有:tinyint占1個字節(jié); smallint 占2個字節(jié); int 占4個字節(jié); bigint 占8個字節(jié); float 占4個字節(jié); double 占8個字節(jié); decimal/numeric【定點浮點數(shù)剂癌,可以做精確運算淤翔,如decimal(6,2)則表示整數(shù)4位佩谷,小數(shù)2位旁壮,整數(shù)超出范圍則報錯,小數(shù)超出范圍則四舍五入】; char(n)【定長字符串谐檀,超出長度抡谐,可能報錯也可能會截斷,若長度不足桐猬,自動補空格麦撵。其最長可表示255個字節(jié),因其為定長字符串,在使用時不用另外去確定其長度免胃,故效率更高】; varchar(n)【變長字符串五垮,在修飾的字符串取值最大長度小于等于255字節(jié)時,前面需要有一個字節(jié)來表示該字符串的長度杜秸。若字符串取值最大長度超過255個字節(jié)時放仗,前面需要使用兩個字節(jié)來表示長度。由于單表字段的總字節(jié)量在65535個字節(jié)撬碟,則varchar(n)最大表示范圍是65535個字節(jié)诞挨,而n的取值則由具體字符集編碼確定(gbk中中文占兩個字節(jié),utf8中中文占3個字節(jié))呢蛤。一般情況下我們會使用varchar保存255字節(jié)以內(nèi)的字符串】; text【可表示65535個字節(jié)惶傻,但只占用表總字節(jié)量的10個字節(jié)乘瓤,故在保存大篇幅文檔時谆扎,可選擇text數(shù)據(jù)類型】;blob【超大對象數(shù)據(jù)類型,使用時需要用流來讀寫blob字段數(shù)據(jù)稻轨。但是通常不會用來保存文本励翼◎诟遥】; 還有一類表示時間日期的數(shù)據(jù)類型【datatime(年月日時分秒),date(年月日)汽抚,time(時分秒)抓狭,timestamp(時間戳,也表示年月日時分秒造烁,但最大只能表示2038年否过。在修改一行數(shù)據(jù)時,第一個timestamp字段會自動更新為系統(tǒng)的當(dāng)前時間惭蟋。且不能取null值苗桂,一旦填入null,會自動填入系統(tǒng)當(dāng)前時間告组。故無特殊要求煤伟,一般不用。)】惹谐。
? ? 9持偏、在數(shù)據(jù)庫存儲引擎方面,常用的有innodb和myisam氨肌。innodb是一種默認推薦引擎鸿秆,支持事務(wù)和外鍵。提供了行級鎖怎囚,在一個用戶對表中某一行進行操作時卿叽,不允許其他用戶對此行進行操作桥胞,但是不影響其他用戶對表中其他行進行操作。其生成的表文件中考婴,表名.frm用于保存表的結(jié)構(gòu)贩虾,表名.ibd則保存數(shù)據(jù)和索引。
? ? myisam存儲引擎則不支持事務(wù)和外鍵沥阱,提供的是表級的鎖缎罢,但這也成就了其數(shù)據(jù)訪問效率更高。在生成的表文件中考杉,表名.frm保存表結(jié)構(gòu)策精,表名.MYD保存數(shù)據(jù),表名.MYI保存索引數(shù)據(jù)崇棠。除了innodb和myisam咽袜,也還存在其他數(shù)據(jù)庫存儲引擎,例如memory內(nèi)存表等枕稀。
? ? MySQL君询刹,初次見面,請多多關(guān)照萎坷!