一斋配、數(shù)據(jù)庫(kù)概述
1.為什么軟件測(cè)試工程師還需要學(xué)習(xí)數(shù)據(jù)庫(kù)以及開(kāi)發(fā)方面的知識(shí)坏瞄?
測(cè)試工程師的目的是找出軟件的不足鸠匀,并告訴開(kāi)發(fā)工程師,出現(xiàn)問(wèn)題的環(huán)境爬范,操作步驟和輸入輸出數(shù)據(jù)青瀑;優(yōu)秀的測(cè)試工程師斥难,需要告訴開(kāi)發(fā)團(tuán)隊(duì)躬络,軟件的不足穷当,這類(lèi)不足會(huì)導(dǎo)致什么情況馁菜,如何避免,以及如何去修改(這是為什么高級(jí)軟件測(cè)試工程師比開(kāi)發(fā)工程師工資高的原因)智嚷。
測(cè)試工程師在測(cè)試軟件過(guò)程中盏道,不僅僅需要在界面進(jìn)行操作,還需要檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否正確朗伶,從而在軟件出現(xiàn)問(wèn)題時(shí)候论皆,能夠定位到問(wèn)題原因;
學(xué)習(xí)數(shù)據(jù)庫(kù)觉鼻,掌握數(shù)據(jù)庫(kù)操作坠陈,增加面試成功機(jī)會(huì)庸蔼,可以提高工資姐仅。
2. 什么是數(shù)據(jù)庫(kù)
Excle的數(shù)據(jù)的確很方便掏膏,但是對(duì)于企業(yè)來(lái)說(shuō)就不一樣了。一個(gè)公司里面可能有成千上萬(wàn)的Excel表格颖变,還在不同的電腦上,而他們的員工和客戶(hù)需要實(shí)時(shí)看到企業(yè)給他們提供的所有數(shù)據(jù)衔峰,這種文件管理的方法就很麻煩朽色,總不能每分鐘都把一個(gè)新的巨大無(wú)比的Excel文件發(fā)給所有客戶(hù)呀抱冷。
數(shù)據(jù)庫(kù)是按照數(shù)據(jù)的結(jié)構(gòu)來(lái)組織旺遮、存儲(chǔ)耿眉、和管理數(shù)據(jù)的倉(cāng)庫(kù)鸣剪,簡(jiǎn)而言之债鸡,就是存放數(shù)據(jù)的倉(cāng)庫(kù)厌均。正是因?yàn)橛辛藬?shù)據(jù)庫(kù)后晶密,所有人可以直接在這個(gè)系統(tǒng)上查找數(shù)據(jù)和修改數(shù)據(jù)惹挟。例如你每天使用余額寶查看自己的賬戶(hù)收益,就是從后臺(tái)數(shù)據(jù)庫(kù)讀取數(shù)據(jù)后給你的运怖。
數(shù)據(jù)庫(kù)的英文名稱(chēng)叫DB(Database),那么數(shù)據(jù)庫(kù)里面有什么東東呢咏连?
其實(shí),數(shù)據(jù)庫(kù)通常包含一個(gè)或多個(gè)表組成垄懂。如果你用過(guò)Excel,就會(huì)知道Excel是一張一張的二維表漫谷。每個(gè)表都是由列和行組成的朽寞,其中每一列都用名字來(lái)標(biāo)識(shí)出來(lái)脑融。同樣的,數(shù)據(jù)庫(kù)里存放的也是一張一張的表妓布,只不過(guò)各個(gè)表之間是有聯(lián)系的。所以释涛,簡(jiǎn)單來(lái)說(shuō):數(shù)據(jù)庫(kù)=多張表+各表之間的關(guān)系
其實(shí)數(shù)據(jù)庫(kù)是邏輯上的概念,它是一堆互相關(guān)聯(lián)的數(shù)據(jù)窖认,放在物理實(shí)體上,是一堆寫(xiě)在磁盤(pán)上的文件喝噪,文件中有數(shù)據(jù)。這些最基礎(chǔ)的數(shù)據(jù)組成了表(table)。
3. 常見(jiàn)數(shù)據(jù)庫(kù)
Oracle是最掙錢(qián)的數(shù)據(jù)庫(kù),出自甲骨文公司桥言,市場(chǎng)占有率非常高并鸵,功能非常強(qiáng)大,被一些大型企業(yè)弯汰,電信湖雹,銀行咏闪,證券公司、金融公司所使用摔吏,市場(chǎng)占有率第一鸽嫂。
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)征讲,由瑞典MySQL AB 公司開(kāi)發(fā)溪胶,目前屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一稳诚,在 WEB 應(yīng)用方面哗脖,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟件扳还。MySQL目前最流行的開(kāi)源數(shù)據(jù)庫(kù)才避,被甲骨文公司所占用,威脅著老大Oracle的地位氨距,開(kāi)源桑逝,免費(fèi),支持多平臺(tái)俏让,簡(jiǎn)單易學(xué)易操作楞遏,市場(chǎng)占有率第二。
SQLServer是微軟開(kāi)發(fā)的數(shù)據(jù)庫(kù)首昔,針對(duì)服務(wù)器寡喝,僅支持Windows操作系統(tǒng),號(hào)稱(chēng)是windows上最好用的數(shù)據(jù)庫(kù)勒奇。數(shù)據(jù)庫(kù)的天下不僅僅是MySQL和Oracle的预鬓,SQLServer也正在慢慢崛起,微軟網(wǎng)羅了不少數(shù)據(jù)庫(kù)的專(zhuān)家赊颠,推出了不少重磅功能格二。
MongoDB劈彪,最好用的文檔型數(shù)據(jù)庫(kù),是NOSQL類(lèi)型數(shù)據(jù)庫(kù)的領(lǐng)導(dǎo)者之一顶猜,也是當(dāng)前最成功的NoSQL類(lèi)型數(shù)據(jù)庫(kù)沧奴,數(shù)據(jù)存儲(chǔ)格式采用JSON形式,非常靈活长窄。
Redis滔吠,最好的內(nèi)存級(jí)數(shù)據(jù)庫(kù),查詢(xún)效率極高抄淑,并且在Redis 3.0之后屠凶,支持多種數(shù)據(jù)類(lèi)型,String肆资,Set矗愧,List,Hash等類(lèi)型郑原,開(kāi)始支持集群唉韭,彌補(bǔ)了自身短板。是目前做緩存最流行的數(shù)據(jù)庫(kù)
Neo4J犯犁,最好的圖形化數(shù)據(jù)庫(kù)属愤,流行話(huà)較低,但是圖形化數(shù)據(jù)庫(kù)的絕對(duì)領(lǐng)導(dǎo)者酸役。
SQLite住诸,最流行的嵌入式數(shù)據(jù)庫(kù),占領(lǐng)手機(jī)行業(yè)的絕對(duì)領(lǐng)導(dǎo)者地位涣澡,Android和IOS兩大手機(jī)系統(tǒng)贱呐,都內(nèi)嵌了SQLite數(shù)據(jù)庫(kù),SQLite是一個(gè)完整的關(guān)系型數(shù)據(jù)庫(kù)入桂,支持標(biāo)準(zhǔn)SQL奄薇,支持事務(wù)操作,程序包非常小抗愁,是嵌入式設(shè)備的最佳選擇馁蒂。
各個(gè)數(shù)據(jù)庫(kù)軟件的使用差別大同小異,但是因?yàn)镸ySQL是開(kāi)源的蜘腌,成為各大公司使用的主流沫屡,面試也主要以MySQL為主。
4.數(shù)據(jù)庫(kù)和SQL是什么關(guān)系逢捺?
結(jié)構(gòu)化查詢(xún)語(yǔ)言(Structured Query Language)簡(jiǎn)稱(chēng)SQL谁鳍,是一種特殊目的的編程語(yǔ)言,是一種數(shù)據(jù)庫(kù)查詢(xún)和程序設(shè)計(jì)語(yǔ)言劫瞳,用于存取數(shù)據(jù)以及查詢(xún)倘潜、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng);同時(shí)也是數(shù)據(jù)庫(kù)腳本文件的擴(kuò)展名志于。
數(shù)據(jù)庫(kù)里面放著數(shù)據(jù)涮因,而SQL是用來(lái)操作數(shù)據(jù)庫(kù)里數(shù)據(jù)的語(yǔ)言(工具)。
例如有一碗米飯(碗就是mysql伺绽,里面放的米是數(shù)據(jù))养泡,你要吃碗里的米飯,拿什么吃奈应?拿筷子(sql)澜掩。用筷子(sql)操作碗里(mysql)的米飯(數(shù)據(jù))
二、MySQL數(shù)據(jù)庫(kù)的安裝配置
????2.1MySQL概述
????????1. 概述
????????MySQL 是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)杖挣,由瑞典 MySQL AB 公司開(kāi)發(fā)肩榕,目前屬于 Oracle 公司。MySQL 是一種關(guān)聯(lián)數(shù)據(jù)庫(kù)管理系統(tǒng)惩妇,關(guān)聯(lián)數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中株汉,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性歌殃。
????????2. 特點(diǎn)
MySQL 是開(kāi)源的乔妈,目前隸屬于 Oracle 旗下產(chǎn)品。
MySQL 支持大型的數(shù)據(jù)庫(kù)氓皱÷氛伲可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù)。
MySQL 使用標(biāo)準(zhǔn)的 SQL 數(shù)據(jù)語(yǔ)言形式波材。
MySQL 可以運(yùn)行于多個(gè)系統(tǒng)上股淡,并且支持多種語(yǔ)言。這些編程語(yǔ)言包括 C各聘、C++揣非、Python、Java躲因、Perl早敬、PHP、Eiffel大脉、Ruby 和 Tcl 等搞监。
MySQL 對(duì)PHP有很好的支持,PHP 是目前最流行的 Web 開(kāi)發(fā)語(yǔ)言镰矿。
MySQL 支持大型數(shù)據(jù)庫(kù)琐驴,支持 5000 萬(wàn)條記錄的數(shù)據(jù)倉(cāng)庫(kù),32 位系統(tǒng)表文件最大可支持 4GB,64 位系統(tǒng)支持最大的表文件為8TB绝淡。
MySQL 是可以定制的宙刘,采用了 GPL 協(xié)議,你可以修改源碼來(lái)開(kāi)發(fā)自己的 MySQL 系統(tǒng)牢酵。
????????3. 下載
????????2.2 安裝
????????打開(kāi)下載的mysql安裝文件mysql-5.5.27-win32.zip悬包,雙擊安裝:
接受協(xié)議,下一步:
選擇安裝類(lèi)型馍乙,有“Typical(默認(rèn))”布近、“Complete(完全)”、“Custom(用戶(hù)自定義)”三個(gè)選項(xiàng)丝格,選擇“Custom”撑瞧,按“next”鍵繼續(xù)。
點(diǎn)擊“install”
進(jìn)入MySQL介紹显蝌,下一步即可:
安裝完成预伺,直接啟動(dòng)即可:
????????2.3配置
????????安裝完成了,出現(xiàn)如下界面將進(jìn)入mysql配置向?qū)А?/p>
選擇配置方式琅束,“Detailed Configuration(手動(dòng)精確配置)”扭屁、“Standard Configuration(標(biāo)準(zhǔn)配置)”,我們選擇“Detailed Configuration”涩禀,方便熟悉配置過(guò)程料滥。
選擇服務(wù)器類(lèi)型,“Developer Machine(開(kāi)發(fā)測(cè)試類(lèi)艾船,mysql占用很少資源)”葵腹、“Server Machine(服務(wù)器類(lèi)型,mysql占用較多資源)”屿岂、“Dedicated MySQL Server Machine(專(zhuān)門(mén)的數(shù)據(jù)庫(kù)服務(wù)器践宴,mysql占用所有可用資源)”
選擇mysql數(shù)據(jù)庫(kù)的大致用途,“Multifunctional Database(通用多功能型爷怀,好)”阻肩、“Transactional Database Only(服務(wù)器類(lèi)型,專(zhuān)注于事務(wù)處理运授,一般)”烤惊、“Non-Transactional Database Only(非事務(wù)處理型,較簡(jiǎn)單吁朦,主要做一些監(jiān)控柒室、記數(shù)用,對(duì)MyISAM數(shù)據(jù)類(lèi)型的支持僅限于non-transactional)逗宜,按“Next”繼續(xù)雄右。
數(shù)據(jù)庫(kù)存儲(chǔ)位置空骚,下一步:
選擇網(wǎng)站并發(fā)連接數(shù),同時(shí)連接的數(shù)目擂仍,“Decision Support(DSS)/OLAP(20個(gè)左右)”囤屹、“Online Transaction Processing(OLTP)(500個(gè)左右)”、“Manual Setting(手動(dòng)設(shè)置防楷,自己輸一個(gè)數(shù))”牺丙。
是否啟用TCP/IP連接则涯,設(shè)定端口复局,如果不啟用,就只能在自己的機(jī)器上訪(fǎng)問(wèn)mysql數(shù)據(jù)庫(kù)了粟判,在這個(gè)頁(yè)面上亿昏,您還可以選擇“啟用標(biāo)準(zhǔn)模式”(Enable Strict Mode),這樣MySQL就不會(huì)允許細(xì)小的語(yǔ)法錯(cuò)誤档礁。如果是新手角钩,建議您取消標(biāo)準(zhǔn)模式以減少麻煩。但熟悉MySQL以后呻澜,盡量使用標(biāo)準(zhǔn)模式递礼,因?yàn)樗梢越档陀泻?shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)的可能性。按“Next”繼續(xù)
選擇字符集羹幸,就是對(duì)mysql默認(rèn)數(shù)據(jù)庫(kù)語(yǔ)言編碼進(jìn)行設(shè)置(重要)脊髓,一般選UTF-8,按 “Next”繼續(xù):
選擇是否將mysql安裝為windows服務(wù)栅受,還可以指定Service Name(服務(wù)標(biāo)識(shí)名稱(chēng))将硝,是否將mysql的bin目錄加入到Windows PATH(加入后,就可以直接使用bin下的文件屏镊,而不用指出目錄名依疼,比如連接,“mysql.exe -uusername -ppassword;”就可以了而芥,不用指出mysql.exe的完整地址律罢,很方便),我這里全部打上了勾棍丐,Service Name不變误辑。按“Next”繼續(xù)。
詢(xún)問(wèn)是否要修改默認(rèn)root用戶(hù)(超級(jí)管理)的密碼骄酗∠∮啵“Enable root access from remote machines(是否允許root用戶(hù)在其它的機(jī)器上登陸,如果要安全趋翻,就不要勾上睛琳,如果要方便盒蟆,就勾上它)”。最后“Create An Anonymous Account(新建一個(gè)匿名用戶(hù)师骗,匿名用戶(hù)可以連接數(shù)據(jù)庫(kù)历等,不能操作數(shù)據(jù),包括查詢(xún))”辟癌,一般就不用勾了寒屯,設(shè)置完畢,按“Next”繼續(xù)黍少。
執(zhí)行
????????2.4開(kāi)啟和關(guān)閉數(shù)據(jù)庫(kù)服務(wù):
兩種方式
第一種
計(jì)算機(jī) → 管理 → 服務(wù) → 找見(jiàn)數(shù)據(jù)庫(kù) → 操作
第二種
命令行方式寡夹,win → “命令提示符” → 以管理員身份打開(kāi) → net stop 數(shù)據(jù)庫(kù)名(MySQLFly)
net start 數(shù)據(jù)庫(kù)名(MySQLFly)打開(kāi)數(shù)據(jù)庫(kù)服務(wù)
????????2.5登錄、退出數(shù)據(jù)庫(kù)
登錄
命令行方式厂置,win → “命令提示符” → 以管理員身份打開(kāi) →
mysql -h localhost -P 3306 -u root -p
退出
exit 或者 ctrl+c
????2.6常見(jiàn)命令
顯示數(shù)據(jù)庫(kù)? ?show databases;
數(shù)據(jù)庫(kù)切換? use 數(shù)據(jù)庫(kù)名
查看當(dāng)前庫(kù)的所有表 show tables;
查看其他庫(kù)所有表??show? tables from 庫(kù)名;
創(chuàng)建表?
create table 表名(
? 列名 類(lèi)型,
? 列名 類(lèi)型)
查看表結(jié)構(gòu)??desc 表名;
三菩掏、SQL語(yǔ)句分類(lèi)
3.1. DDL-數(shù)據(jù)庫(kù)定義語(yǔ)言
3.1.1. 概念及作用
database defination language 數(shù)據(jù)庫(kù)定義語(yǔ)言,用于定義數(shù)據(jù)庫(kù)昵济,用于定義表結(jié)構(gòu)
3.1.2. 表中字段基本數(shù)據(jù)類(lèi)型
MySQL支持多種類(lèi)型智绸,大致可以分為三類(lèi):數(shù)值、日期/時(shí)間和字符串(字符)類(lèi)型
一個(gè)漢字占多少長(zhǎng)度與編碼有關(guān):
UTF-8:一個(gè)漢字=3個(gè)字節(jié)
GBK:一個(gè)漢字=2個(gè)字節(jié)
varchar(n) 表示 n 個(gè)字符访忿,無(wú)論漢字和英文瞧栗,Mysql 都能存入 n 個(gè)字符,僅是實(shí)際字節(jié)長(zhǎng)度有所區(qū)別
3.1.3. 數(shù)據(jù)庫(kù)語(yǔ)句操作
在登陸 MySQL 服務(wù)后海铆,使用 create 命令創(chuàng)建數(shù)據(jù)庫(kù)迹恐,語(yǔ)法如下:
CREATE DATABASE 數(shù)據(jù)庫(kù)名;
在刪除數(shù)據(jù)庫(kù)過(guò)程中,務(wù)必要十分謹(jǐn)慎游添,因?yàn)樵趫?zhí)行刪除命令后系草,所有數(shù)據(jù)將會(huì)消失。語(yǔ)法:
在你連接到 MySQL 數(shù)據(jù)庫(kù)后唆涝,可能有多個(gè)可以操作的數(shù)據(jù)庫(kù)找都,所以你需要選擇你要操作的數(shù)據(jù)庫(kù)
注意:所有的數(shù)據(jù)庫(kù)名,表名廊酣,表字段都是區(qū)分大小寫(xiě)的能耻。所以你在使用SQL命令時(shí)需要輸入正確的名稱(chēng)。
查看數(shù)據(jù)庫(kù)創(chuàng)建細(xì)節(jié)
創(chuàng)建一個(gè)使用gbk字符集的數(shù)據(jù)庫(kù)
3.1.4. 表結(jié)構(gòu)語(yǔ)句操作
選擇數(shù)據(jù)庫(kù)
創(chuàng)建MySQL數(shù)據(jù)表需要以下信息:
表名亡驰、表字段名晓猛、定義每個(gè)表字段
3.1.5. 定義表的約束
如果你不想字段為 NULL 可以設(shè)置字段的屬性為 NOT NULL, 在操作數(shù)據(jù)庫(kù)時(shí)如果輸入該字段的數(shù)據(jù)為NULL 凡辱,就會(huì)報(bào)錯(cuò)戒职。
AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵透乾,數(shù)值會(huì)自動(dòng)加1洪燥。
PRIMARY KEY關(guān)鍵字用于定義列為主鍵磕秤。為了標(biāo)識(shí)數(shù)據(jù)庫(kù)記錄唯一性,不允許記錄重復(fù)捧韵,且鍵值不能為空市咆,主鍵也是一個(gè)特殊索引。 您可以使用多列來(lái)定義主鍵再来,列間以逗號(hào)分隔蒙兰。
UNIQUE KEY的用途:主要是用來(lái)防止數(shù)據(jù)插入的時(shí)候重復(fù)的
ENGINE:設(shè)置存儲(chǔ)引擎
CHARSET: 設(shè)置編碼
3.2 DML - 數(shù)據(jù)庫(kù)操作語(yǔ)言
3.2.1. 概念及作用
DML:data manipulation language 數(shù)據(jù)庫(kù)操作語(yǔ)言,用以操作數(shù)據(jù)庫(kù)芒篷。
3.2.2. 插入數(shù)據(jù)
問(wèn)題一:插入中文會(huì)報(bào)錯(cuò)
解決:
問(wèn)題二:數(shù)據(jù)庫(kù)命令框如果有中文就亂碼
3.2.3. 刪除數(shù)據(jù)
注意:delete from student;與truncate table student;都能刪除該表中所有數(shù)據(jù)搜变,區(qū)別:前者刪除后自增主鍵還在,后者主鍵會(huì)從1開(kāi)始梭伐。
3.2.4. 修改數(shù)據(jù)
3.3 DQL-數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言
3.3.1.概念及作用
Data Query Language 數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言
3.3.2.數(shù)據(jù)查詢(xún)
查詢(xún)所有學(xué)生成績(jī)痹雅,并輸出效果.png
3.3.3. 排序查詢(xún)
MySQL中 升序?yàn)閍sc,降序?yàn)閐esc
例如:
升序:select? *? from? 表名 order by? 表中的字段 asc(MySQL中默認(rèn)是升序排列糊识,可不寫(xiě)) ;
降序:select? *? from? 表名 order by? 表中的字段 desc 摔蓝;
若要進(jìn)行同時(shí)一個(gè)升序一個(gè)降序 例如:
order by 升序字段 asc赂苗,降序字段 desc ;
3.3.4.分頁(yè)查詢(xún)
limit是mysql的分頁(yè)查詢(xún)語(yǔ)法:
select * from table limit m,n
其中m是指記錄從m+1開(kāi)始,贮尉,N代表取n條記錄拌滋。
3.3.5.分組查詢(xún)
分組查詢(xún)得到結(jié)果是第一次查到的某個(gè)組別。
注意:
1)分組之后查詢(xún)的字段最好不要是name等猜谚,最好的分組字段和聚合函數(shù)
2)where和having的區(qū)別
①where在分組之前限定败砂,如果不滿(mǎn)足條件則不參與分組。having在分組之后限定魏铅,如果不滿(mǎn)足條件昌犹,則不會(huì)被查出來(lái)。
②where后不可以跟聚合函數(shù)览芳,having可以進(jìn)行聚合函數(shù)判斷斜姥。
③having只能和group by一起使用
3.3.6. 報(bào)表查詢(xún)
count? 個(gè)數(shù)
sum? ? 總數(shù)
avg? ? ? ? 平均數(shù)
max? ? 最大值
min? ? 最小值
3.4 數(shù)據(jù)控制語(yǔ)言
數(shù)據(jù)控制語(yǔ)言:簡(jiǎn)稱(chēng)【DCL】(Data Control Language),用來(lái)定義數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)權(quán)限和安全級(jí)別沧竟,及創(chuàng)建用戶(hù)铸敏;關(guān)鍵字:grant等