數(shù)據(jù)庫概述
一济榨、常見的概念
數(shù)據(jù)庫(DataBase):數(shù)據(jù)庫是按照數(shù)據(jù)結(jié)構(gòu)來組織擒滑、存儲和管理數(shù)據(jù)的倉庫藻糖。數(shù)據(jù)庫管理系統(tǒng)(Database Management SystemDBMS):是專門用于管理數(shù)據(jù)庫的計算機系統(tǒng)軟件巨柒。數(shù)據(jù)庫管理系統(tǒng)能夠為數(shù)據(jù)庫提供數(shù)據(jù)的定義洋满、建立、維護驻民、查詢和統(tǒng)計等操作功能回还,并完成對數(shù)據(jù)完整性懦趋、安全性進行控制的功能仅叫。
二诫咱、發(fā)展歷程
我們一般說的數(shù)據(jù)庫,就是指的DBMS: 數(shù)據(jù)庫服務(wù)器。數(shù)據(jù)庫技術(shù)發(fā)展歷程如下:
- 層次數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)庫技術(shù)階段:使用指針來表示數(shù)據(jù)之間的聯(lián)系掏呼。
- 關(guān)系數(shù)據(jù)庫技術(shù)階段:經(jīng)典的里程碑階段憎夷。代表DBMS有Oracle祥得、DB2级及、MySQL、SQL Server等县踢。
- 后關(guān)系數(shù)據(jù)庫技術(shù)階段:關(guān)系型數(shù)據(jù)庫存在數(shù)據(jù)模型暇咆,性能其骄,拓展伸縮性的缺點拯爽,出現(xiàn)了:
- ORDBMS:面向?qū)ο髷?shù)據(jù)庫技術(shù)毯炮。
- NoSQL :結(jié)構(gòu)化數(shù)據(jù)庫技術(shù)。
隨著大數(shù)據(jù)的不斷發(fā)展为迈,非關(guān)系型的數(shù)據(jù)庫現(xiàn)在成了一個極其熱門的新領(lǐng)域,非關(guān)系數(shù)據(jù)庫產(chǎn)品的發(fā)展非常迅速缺菌,產(chǎn)生了一系列出色的NoSQL數(shù)據(jù)庫葫辐。
常見的NoSQL數(shù)據(jù)庫分為四大類
- 鍵值存儲數(shù)據(jù)庫:Oracle BDB,Redis,BeansDB
- 列式儲數(shù)數(shù)據(jù)庫:HBase,Cassandra,Riak
- 文檔型數(shù)據(jù)庫:MongoDB,CouchDB
- 圖形數(shù)據(jù)庫:Neo4J,InfoGrid,Infinite Graph
常見的關(guān)系數(shù)據(jù)庫:
數(shù)據(jù)庫系 | 所屬公司 |
---|---|
Oracle | Oracle |
DB2 | IBM |
SQL Server | MS |
MySQL | AB-->SUN-->Oracle |
特點比較:
- Oracle:運行穩(wěn)定,可移植性高伴郁,功能齊全耿战,性能超群!適用于大型企業(yè)領(lǐng)域焊傅,但是價格昂貴昆箕。
- DB2:速度快鸦列、可靠性好骆姐,適于海量數(shù)據(jù)带射,恢復(fù)性極強灿里。適用于大中型企業(yè)領(lǐng)域,但是價格昂貴咏雌。
- SQL Server:全面氛雪,效率高赞警,界面友好苗分,操作容易择浊,但是不跨平臺。適用于中小型企業(yè)領(lǐng)域泳桦。
- MySQL:開源,體積小芳誓,速度快。適用于中小型企業(yè)領(lǐng)域褥符。
三逊朽、SQL:結(jié)構(gòu)化查詢語言(Structured Query Language)坟募。
結(jié)構(gòu)化查詢語言是關(guān)系型數(shù)據(jù)庫標(biāo)準(zhǔn)語言懈糯。特點:簡單,靈活,功能強大畜普。
SQL包含6個部分:
- 數(shù)據(jù)查詢語言(DQL):
其語句码撰,也稱為“數(shù)據(jù)檢索語句”,用以從表中獲得數(shù)據(jù)个盆,確定數(shù)據(jù)怎樣在應(yīng)用程序給出脖岛。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE砾省,ORDER BY鸡岗,GROUP BY和HAVING混槐。這些DQL保留字常與其他類型的SQL語句一起使用编兄。 - 數(shù)據(jù)操作語言(DML):
其語句包括動詞INSERT,UPDATE和DELETE声登。它們分別用于添加狠鸳,修改和刪除表中的行。也稱為動作查詢語言悯嗓。 - 事務(wù)處理語言(TPL):
它的語句能確保被DML語句影響的表的所有行及時得以更新件舵。TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK脯厨。 - 數(shù)據(jù)控制語言(DCL):
它的語句通過GRANT或REVOKE獲得許可铅祸,確定單個用戶和用戶組對數(shù)據(jù)庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。 - 數(shù)據(jù)定義語言(DDL):
其語句包括動詞CREATE和DROP临梗。在數(shù)據(jù)庫中創(chuàng)建新表或刪除表(CREAT TABLE 或 DROP TABLE)涡扼;為表加入索引等。DDL包括許多與人數(shù)據(jù)庫目錄中獲得數(shù)據(jù)有關(guān)的保留字盟庞。它也是動作查詢的一部分吃沪。 - 指針控制語言(CCL):
它的語句,像DECLARE CURSOR什猖,F(xiàn)ETCH INTO和UPDATE WHERE CURRENT用于對一個或多個表單獨行的操作票彪。
四、書寫規(guī)則
1.數(shù)據(jù)庫中不狮,SQL語句大小寫不敏感
2.SQL語句可單行或多行書寫
3.在SQL語句中降铸,關(guān)鍵字不能跨多行或縮寫
4.為了提高可讀性,一般關(guān)鍵字大寫摇零,其他小寫
5.空格和縮進使程序易讀
五垮耳、表的理解
什么是表?表是用來干嘛的遂黍?表又叫二維表(有行和列) 终佛,用來存儲數(shù)據(jù),
表具有固定的列數(shù)和任意的行數(shù),在數(shù)學(xué)上稱為“關(guān)系”雾家。
二維表是同類實體的各種屬性的集合铃彰,每個實體對應(yīng)于表中的一行,在關(guān)系中稱為一條記錄
表中的列表示屬性芯咧,稱為Field牙捉,相當(dāng)于通常記錄中的一個數(shù)據(jù)項,也叫列敬飒、字段邪铲。
解釋表結(jié)構(gòu)和面向?qū)ο蟮年P(guān)系
能不能使用面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)庫呢?
MySQL安裝和配置
一、MySQL安裝過程中注意:
- MySQL的默認(rèn)端口是:3306
- 數(shù)據(jù)庫默認(rèn)字符集就是utf8
- 設(shè)置密碼:(盡量簡單能記住无拗,忘記后很麻煩)
- MySQL的運行要基于 .Net framework 4和VC++庫
- 如果沒有安裝以上兩個庫則在安裝過程中會出錯,必須先安裝以上程序
- 解決MySQL占內(nèi)存的問題:
- 找到:my.ini文件:
- table_definition_cache=400
- table_open_cache=200
二带到、操作數(shù)據(jù)庫的流程
- 建立連接(認(rèn)證身份)
- 客戶端向服務(wù)器端發(fā)送SQL命令
- 服務(wù)器端執(zhí)行SQL,并返回執(zhí)行的結(jié)果
- 客戶端接收結(jié)果(并顯示)
- 斷開連接
三英染、啟動和連接MySQL
1.啟動MySQL服務(wù):打開數(shù)據(jù)庫連接之前:一定要保證MySQL服務(wù)已經(jīng)開啟了.在服務(wù)中找到MySQL的服務(wù),查看是否處于正在運行的狀態(tài)
在Windows中使用命令控制服務(wù)的狀態(tài)(必須使用管理員身份開啟命令行)
開啟服務(wù): net start 服務(wù)名 如: net start mysql
關(guān)閉服務(wù): net stop 服務(wù)名 如: net stop mysql
2.連接MySQL數(shù)據(jù)庫:
- 方式1:進入MySQL, 在命令行中輸入密碼揽惹;
- 方式2:在命令行中:找到安裝目錄下的bin錄制中有個mysql的命令
格式:mysql -u賬戶 -p密碼 -h數(shù)據(jù)庫服務(wù)器安裝的主機 -P數(shù)據(jù)庫端口
mysql -uroot -padmin -hlocalhost -P 3306
若連接的數(shù)據(jù)庫服務(wù)器在本機上,并且端口是3306四康。
則可以
四搪搏、MySQL圖形化管理軟件Navicat:
- Navicat for MySQL是一款強大的 MySQL 數(shù)據(jù)庫管理和開發(fā)工具,它為專業(yè)開發(fā)者提供了一套強大的足夠尖端的工具闪金,但對于新用戶仍然易于學(xué)習(xí)疯溺。
- Navicat for MySQL 基于Windows平臺,為 MySQL 量身訂作,提供類似于 MySQL 的用管理界面工具囱嫩。此解決方案的出現(xiàn)嗅辣,將解放 PHP、J2EE 等程序員以及數(shù)據(jù)庫設(shè)計者挠说、管理者的大腦澡谭,降低開發(fā)成本,為用戶帶來更高的開發(fā)效率损俭。
MySQL數(shù)據(jù)庫操作
一蛙奖、數(shù)據(jù)庫操作和存儲引擎
1.數(shù)據(jù)庫和數(shù)據(jù)庫對象
一般來說我們說的數(shù)據(jù)庫(MySQL/Oracle等)指的都是數(shù)據(jù)庫服務(wù)器(DBMS)
數(shù)據(jù)庫:存儲數(shù)據(jù)庫對象的容器。
數(shù)據(jù)庫對象:存儲杆兵,管理和使用數(shù)據(jù)的不同結(jié)構(gòu)形式雁仲,如:表、視圖琐脏、存儲過程攒砖、函數(shù)、觸發(fā)器日裙、事件等吹艇。
數(shù)據(jù)庫分兩種:
- 系統(tǒng)數(shù)據(jù)庫(系統(tǒng)自帶的數(shù)據(jù)庫):不能修改
information_schema:存儲數(shù)據(jù)庫對象信息,如:用戶表信息昂拂,列信息受神,權(quán)限,字符格侯,分區(qū)等信息
performance_schema:存儲數(shù)據(jù)庫服務(wù)器性能參數(shù)信息鼻听。
mysql:存儲數(shù)據(jù)庫用戶權(quán)限信息。
sys:系統(tǒng)配置信息联四。
- 用戶數(shù)據(jù)庫(用戶自定義的數(shù)據(jù)庫):一般的撑碴,一個項目一個用戶數(shù)據(jù)庫。
2.數(shù)據(jù)庫操作命令
(1)查看和選擇數(shù)據(jù)庫
- 查看數(shù)據(jù)庫服務(wù)器存在哪些數(shù)據(jù)庫: SHOW DATABASES;
- 使用指定的數(shù)據(jù)庫:USE database_name;
- 查看指定的數(shù)據(jù)庫中有哪些數(shù)據(jù)表: SHOW TABLES;
(2)創(chuàng)建和刪除數(shù)據(jù)庫
- 創(chuàng)建指定名稱的數(shù)據(jù)庫: CREATE DATABASE database_name;
- 刪除數(shù)據(jù)庫:DROP DATABASE database_name;
3.數(shù)據(jù)庫存儲引擎
二朝墩、MySQL常用列類型
1.整數(shù)類型
最常用的整數(shù)類型:
MySQL列類型 | Java數(shù)據(jù)類型 |
---|---|
INT | int/Integer |
BIGINT | long/Long |
MySQL 以一個可選的顯示寬度指示器的形式對 SQL 標(biāo)準(zhǔn)進行擴展醉拓,這樣當(dāng)從數(shù)據(jù)庫檢索一個值時,可以把這個值加長到指定的長度鱼辙。例如廉嚼,指定一個字段的類型為 INT(6)玫镐,就可以保證所包含數(shù)字少于 6 個的值從數(shù)據(jù)庫中檢索出來時能夠自動地用空格填充倒戏。需要注意的是,使用一個寬度指示器不會影響字段的大小和它可以存儲的值的范圍恐似。一般不用指定位寬杜跷。
2.小數(shù)類型
FLOAT[(s,p)] :
DOUBLE[(s,p)] : 小數(shù)類型,可存放實型和整型 ,精度(p)和范圍(s)
money double(5,2): 整數(shù)和小數(shù)一共占5位.其中小數(shù)占2位.
都不夠精確。
定點數(shù)據(jù)類型: DECIMAL葛闷,高精度類型憋槐,金額貨幣優(yōu)先選擇。
MySQL列類型 | Java數(shù)據(jù)類型 |
---|---|
FLOAT | float/Float |
DOUBLE | double/Double |
DECIMAL(s,p) | BigDecimal |
3.字符類型
char(size) 定長字符淑趾,0 - 255字節(jié)阳仔,size指N個字符數(shù),若插入字符數(shù)超過設(shè)定長度扣泊,會被截取并警告近范。
varchar(size) 變長字符,0 - 255字節(jié)延蟹,從MySQL5開始支持65535個字節(jié)评矩,若插入字符數(shù)超過設(shè)定長度,會被截取并警告阱飘。
一般存儲大量的字符串,比如文章的純文本沥匈,可以選用TEXT系列類型蔗喂,這個系列都是變長的。
注意:在MySQL中高帖,字符類型必須指定長度弱恒,值要使用單引號引起來。 相當(dāng)于Java中字符串(String,StringBuilder/StringBuffer);
對比char(4)和varchar(4)占用空間的問題棋恼?
4.日期和時間類型
日期和時間類型為DATETIME返弹、DATE、TIMESTAMP爪飘、TIME和YEAR义起。
注意:在MySQL中,日期時間值使用單引號引起來师崎。 相當(dāng)于Java中Date默终,Calender。
5.二進制類型
存放圖形犁罩、聲音和影像齐蔽,二進制對象,0-4GB床估。
開發(fā)中含滴,我們一般存儲二進制文件保存路徑。
BIT:我們一般存儲0或1丐巫,存儲是Java中的boolean/Boolean類型的值谈况。
其他的大二進制類型勺美,開發(fā)中一般都不用
三、MySQL表的操作
1.創(chuàng)建表
步驟:
- 先進入某一個數(shù)據(jù)庫
- 輸入建表的命令
CREATE TABLE 表名(
列名1 列的類型 [約束],
列名2 列的類型 [約束],
....
列名N 列的類型 [約束]
);
注意:最后一行沒有逗號
使用使用標(biāo)識符時不要用SQL的關(guān)鍵字,如果用到的話怎么辦呢?比如新建一張訂單表(order),但是order是數(shù)據(jù)庫中的關(guān)鍵字(排序使用).
- 解決方案一:使用反引號`把自定義的標(biāo)識符引起來.
- 解決方案二:使用表名的前綴,一般的,習(xí)慣t_order.
2.查看表結(jié)構(gòu)和刪除表
- 查看表目錄:SHOW TABLES;
- 查看表結(jié)構(gòu): DESC table_name;
- 查看DDL語句:SHOW CREATE TABLE table_name;
- 刪除表:DROP TABLE table_name;
3.表的約束:表的約束(針對于某一列):
- 非空約束:NOT NULL(NK)碑韵,不允許某列的內(nèi)容為空赡茸。
- 設(shè)置列的默認(rèn)值:DEFAULT。
- 唯一約束:UNIQUE(UK)祝闻,在該表中占卧,該列的內(nèi)容必須唯一。
- 主鍵約束:PRIMARY KEY(PK)联喘, 非空且唯一屉栓。
- 主鍵自增長:AUTO_INCREMENT,從1開始耸袜,步長為1友多。(MySQL特有)
- 外鍵約束:FOREIGN KEY(FK),A表中的外鍵列的值必須參照于B表中的某一列(B表主鍵)堤框。
主鍵設(shè)計:
1:單列主鍵域滥,單列作為主鍵,建議使用蜈抓。
復(fù)合主鍵启绰,使用多列充當(dāng)主鍵,不建議沟使。
2:主鍵分為兩種:
1)自然主鍵:使用有業(yè)務(wù)含義的列作為主鍵(不推薦使用);
2)代理主鍵:使用沒有業(yè)務(wù)含義的列作為主鍵(推薦使用);
單表查詢(DQL上)
一委可、簡單查詢
1.簡單數(shù)據(jù)查詢
語法:
SELECT {*, column [alias],...}
FROM table_name;
說明:
SELECT 選擇查詢列表
FROM 提供數(shù)據(jù)源(表、視圖或其他的數(shù)據(jù)源)
如果為 * 和創(chuàng)建表時的順序一致腊嗡。
可以自己調(diào)整順序着倾,在select后邊加上要查詢的列名。
2.避免重復(fù)數(shù)據(jù)-DISTINCT
消除結(jié)果中重復(fù)的數(shù)據(jù)燕少。
需求:查詢商品的分類編號卡者。
語法:
SELECT DISTINCT 列名,...
FROM table_name;
3.實現(xiàn)數(shù)學(xué)運算查詢
對NUMBER型數(shù)據(jù)可以使用算數(shù)操作符創(chuàng)建表達式(+ - * /)
對DATE型數(shù)據(jù)可以使用部分算數(shù)操作符創(chuàng)建表達式 (+ -)
運算符優(yōu)先級:
1客们、乘法和除法的優(yōu)先級高于加法和減法
2崇决、同級運算的順序是從左到右
3、表達式中使用"括號"可強行改變優(yōu)先級的運算順序
4.設(shè)置列的別名
設(shè)置列名的別名底挫。
1恒傻、改變列的標(biāo)題頭;
2建邓、用于表示計算結(jié)果的含義盈厘;
3、作為列的別名涝缝;
4扑庞、如果別名中使用特殊字符譬重,或者是強制大小寫敏感拒逮,或有空格時罐氨,都需加雙引號;
二滩援、過濾查詢
1.比較運算符
比較運算符 含義
= 等于
> 大于
>= 大于或等于
< 小于
<= 小于或等于
!=(<>) 不等于
注意:字符串和日期要用單引號擴起來.
要讓MySQL查詢區(qū)分大小寫栅隐,可以:
SELECT * FROM table_name WHERE BINARY productName='g9x'
SELECT * FROM table_name WHERE BINARY productName='G9X'
2.邏輯運算符
邏輯運算符 含義
AND(&&) 如果組合的條件都是TRUE,返回TRUE
OR(||) 如果組合的條件之一是TRUE,返回TRUE
NOT(!) 如果下面的條件是FALSE,返回TRUE
3.優(yōu)先級規(guī)則
運算優(yōu)先級 運算符
1 所有比較運算符
2 NOT
3 AND
4 OR
注意:括號將跨越所有優(yōu)先級規(guī)則
分析SQL:SELECT * FROM product WHERE (NOT productName LIKE '%M%' AND salePrice > 100) OR (dir_id = 2)
4.范圍查詢 -BTEWEEN AND
使用BETWEEN運算符顯示某一值域范圍的記錄,這個操作符最常見的使用在數(shù)字類型數(shù)據(jù)的范圍上玩徊,但對于字符類型數(shù)據(jù)和日期類型數(shù)據(jù)同樣可用租悄。
格式:
SELECT <columnList> FROM table_name
WHERE 列名 BETWEEN minvalue AND maxvalue:閉區(qū)間。
5.集合查詢 -IN
使用IN運算符恩袱,判斷列的值是否在指定的集合中泣棋。
格式: WHERE 列名 IN (值1,值2....);
6.空值查詢 -IS NULL
IS NULL:判斷列的值是否為空畔塔。
格式:WHERE 列名 IS NULL;
7.模糊查詢
使用LIKE運算符執(zhí)行通配查詢潭辈,查詢條件可包含文字字符或數(shù)字:
%通配符:可表示零或多個字符。
_通配符:可表示一個字符澈吨。
通配符:用來實現(xiàn)匹配部分值得特殊字符把敢。
三、結(jié)果排序
排序通過ORDER BY 實現(xiàn) ASC升序 DESC降序 默認(rèn)是升序
1.排序語法和規(guī)則
2.按單列排序
3.按多列排序
4.列的別名排序
四谅辣、MySQL分頁查詢
分頁設(shè)計:
假分頁(內(nèi)存分頁):所有數(shù)據(jù)已經(jīng)存在內(nèi)容中修赞,只是顯示部分而已,
優(yōu)點:每次翻頁時都從內(nèi)存中取數(shù)據(jù),翻頁速度極快,簡單
缺點:消耗內(nèi)存大,容易內(nèi)存溢出
真分頁(數(shù)據(jù)庫分頁):每次翻頁都去數(shù)據(jù)庫查詢數(shù)據(jù)
優(yōu)點:不會造成內(nèi)存溢出
缺點:翻頁比較慢,復(fù)雜
此時,我們講解MySQL特有的分頁方式(LIMIT,在Oracle12C中也提供類似的語法).
設(shè)置每頁最多3條記錄:
語法: LIMIT ?, ?
參數(shù)1:
參數(shù)2:
第一頁:
第二頁:
第三頁:
第四頁:
第N頁:
演示下公式的分頁查詢效果 LIMIT (currentPage-1) * pageSize, pageSize
五桑阶、聚合函數(shù)
什么是聚合函數(shù)/統(tǒng)計函數(shù):
聚合函數(shù)作用于一組數(shù)據(jù)柏副,并對一組數(shù)據(jù)返回一條記錄。
COUNT:統(tǒng)計結(jié)果記錄數(shù)
MAX: 統(tǒng)計計算最大值
MIN: 統(tǒng)計計算最小值
SUM: 統(tǒng)計計算求和
AVG: 統(tǒng)計計算平均值