數(shù)據(jù)庫(kù)就是存儲(chǔ)數(shù)據(jù)的倉(cāng)庫(kù)
數(shù)據(jù)庫(kù)可以實(shí)現(xiàn)數(shù)據(jù)的持久化存儲(chǔ)
數(shù)據(jù)庫(kù)的本質(zhì)是文件系統(tǒng)
Database Management System:數(shù)據(jù)庫(kù)管理系統(tǒng)
DBMA:數(shù)據(jù)庫(kù)管理員
常見(jiàn)的數(shù)據(jù)庫(kù)管理系統(tǒng):
MySQL:Oracle公司的中小型數(shù)據(jù)庫(kù),從6版本開(kāi)始收費(fèi)
Oracle:Oracle公司的大型數(shù)據(jù)庫(kù),收費(fèi)的
DB2:IBM公司的大型數(shù)據(jù)庫(kù)
SQLServer:Mircosoft公司的大型數(shù)據(jù)庫(kù)
SQLite:移動(dòng)端的嵌入式的小型數(shù)據(jù)庫(kù)
Java中主要使用的是MySQL和Oracle
一個(gè)DBMS中可以維護(hù)管理多個(gè)數(shù)據(jù)庫(kù)
一個(gè)數(shù)據(jù)庫(kù)由若干張表組成
一張表包含若干條記錄
一條記錄包含若干字段信息
數(shù)據(jù)庫(kù)中的表相當(dāng)于代碼中的實(shí)體類
例如:要研究醫(yī)生這個(gè)類,就應(yīng)該創(chuàng)建一張醫(yī)生表
數(shù)據(jù)庫(kù)表中的一列(字段)相當(dāng)于實(shí)體類中的屬性
例如:汽車有品牌屬性,那么在汽車表中就應(yīng)該有品牌字段
根據(jù)類創(chuàng)建出的對(duì)象就相當(dāng)于數(shù)據(jù)庫(kù)表中的一行(一條記錄)
例如:當(dāng)我們獲取寵物對(duì)象時(shí),我們就可以從該對(duì)象上獲取它所具備的所有屬性;同樣的,當(dāng)我們查詢到一條寵物記錄時(shí)我們就可以從表中明確該寵物的所有字段信息。
結(jié)構(gòu)化查詢語(yǔ)言:Structured Query Language
分類:
DDL:數(shù)據(jù)定義語(yǔ)言(Data Definition Language)
對(duì)數(shù)據(jù)庫(kù)、表進(jìn)行創(chuàng)建、修改、刪除等操作
關(guān)鍵字:create、alter、drop等
DML:數(shù)據(jù)操作語(yǔ)言(Data Manipulation Language)
對(duì)表中記錄、字段進(jìn)行增、刪、改等操作
關(guān)鍵字:insert、delete、update等
DQL:數(shù)據(jù)查詢語(yǔ)言(Data Query Language)
對(duì)數(shù)據(jù)庫(kù)、表、記錄、字段進(jìn)行查詢的
關(guān)鍵字:select、from、where、in、and、or、between、having、group by、order by、limit等
DCL:數(shù)據(jù)控制語(yǔ)言(Data Control Language)
對(duì)數(shù)據(jù)庫(kù)的安全級(jí)別和訪問(wèn)權(quán)限進(jìn)行管理的
關(guān)鍵字:revoke、grant、commit、roll back等
注:
安裝的目錄必須是純英文路徑的
刪除步驟
在控制面板中卸載軟件
刪除mysql安裝路徑下的mysql文件夾
刪除C盤下ProgramData下的mysql文件夾
登錄mysql
方式一:
打開(kāi) cmd
輸入 mysql -uroot -p密碼
方法二:
打開(kāi) cmd
輸入 mysql -uroot -p
再輸入密碼
方式三:
找到安裝mysql后的 Command Line Client
輸入密碼
C (create) R (read) U (update) D(delete)
建庫(kù):
判斷數(shù)據(jù)庫(kù)是否存在,不存在才創(chuàng)建:
創(chuàng)建數(shù)據(jù)庫(kù)并指明編碼格式:
查詢數(shù)據(jù)庫(kù)的創(chuàng)建語(yǔ)句以及編碼格式:
查看已有的數(shù)據(jù)庫(kù):
刪庫(kù):
判斷數(shù)據(jù)庫(kù)是否存在,存在才刪除:
修改數(shù)據(jù)庫(kù)的編碼格式:
指定使用的數(shù)據(jù)庫(kù):
建表:
判斷表是否存在,不存在才創(chuàng)建:
查詢所有表:
查看表結(jié)構(gòu):
刪表:
判斷表是否存在,存在才刪除:
復(fù)制表結(jié)構(gòu):
修改表名:
修改表結(jié)構(gòu):
添加新字段
刪除字段
修改字段類型
修改字段名
查詢表中的所有記錄:
添加記錄:
向所有字段添加數(shù)據(jù)
向指定字段添加數(shù)據(jù)
批量添加(所有字段)
批量添加(指定字段)
刪除記錄:
刪除所有記錄
根據(jù)條件刪除指定記錄:
刪除所有記錄
修改記錄:
修改所有記錄
根據(jù)條件修改指定記錄
注:
添加記錄時(shí),值的數(shù)量必須與列的數(shù)量一致
添加記錄和修改記錄時(shí),值的類型必須與字段類型一致
除了數(shù)值類型,其他類型都必須用單/雙引號(hào)括起來(lái)
delete from 表名;刪除表中所有記錄,它的刪除方式是逐行刪除,表中有多少條記錄,刪除語(yǔ)句就會(huì)執(zhí)行多少次;truncate table 表名;刪除表中記錄,它的刪除方式是將整張表刪除,然后構(gòu)建一張與原來(lái)表結(jié)構(gòu)相同的空表。
int:整數(shù)類型
double:小數(shù)類型
特殊的:salary double(n,m)
n:表示整數(shù)位和小數(shù)位一共最多有n位
m:表示小數(shù)位最多保留m位
例如:salary double(6,2) 的最大值是9999.99
datetime:時(shí)間戳,包含年月日時(shí)分秒,格式:yyyy-MM-dd HH:mm:ss
timestamp:時(shí)間戳,包含年月日時(shí)分秒,格式:yyyy-MM-dd HH:mm:ss
注:
如果某個(gè)字段的是類型是timestamp,在我們給它賦值為null或者沒(méi)有對(duì)它賦值時(shí),系統(tǒng)會(huì)給它一個(gè)默認(rèn)值,默認(rèn)值是添加這條語(yǔ)句的時(shí)間或者是對(duì)它賦值為null時(shí)的時(shí)間。
timestamp類型字段值不可能是空值
varchar:
例如:name varchar(20):表示姓名字段的值最大20個(gè)字符
查詢所有:
查詢所有記錄的指定字段:
去重查詢
在 where 關(guān)鍵字后加上條件,查詢時(shí)會(huì)根據(jù)條件進(jìn)行記錄的篩選
邏輯運(yùn)算符
&&、and
||、or
!
關(guān)系運(yùn)算符
" > "
" < "
" >= "
" <= "
" = "
" != “、” <> "
指定范圍內(nèi)
between … and …
注:含頭含尾
在指定列表中
in(值1,值2,值3,…)
不在指定列表中
not in(值1,值2,值3,…)
空和非空
判斷為空:is null
判斷非空:is not null
模糊查詢
關(guān)鍵字:like
占位符:
_:?jiǎn)蝹€(gè)任意字符
%:任意個(gè)任意字符
關(guān)鍵字:order by
排序方法:
升序:默認(rèn),asc
降序:desc
注:如果多個(gè)字段進(jìn)行排序,只有第一字段的值相同時(shí),才會(huì)執(zhí)行第二字段的排序
格式:order by 字段1 排序方式,字段2 排序方式,…;
概念:將一列數(shù)據(jù)作為一個(gè)整體,然后進(jìn)行縱向的計(jì)算
avg():計(jì)算平均值
sum():求和
max():求最大值
min():求最小值
count():求數(shù)量
注:
count() 的參數(shù)一般使用非空字段或者*
聚合函數(shù)不計(jì)算 null 值
關(guān)鍵字:group by
注:
分組后查詢的字段只能是:分組字段、聚合函數(shù)
where 和 having 的區(qū)別:
where 用在分組前進(jìn)行條件篩選,如果不滿足 where 的條件則不進(jìn)入分組;having 用在分組后進(jìn)行條件篩選,如果不滿足 having 的條件則不被查詢到
where 后不能跟聚合函數(shù),having 后可以使用聚合函數(shù)進(jìn)行分組后的條件篩選
關(guān)鍵字:limit
語(yǔ)法:limit 開(kāi)始索引,每頁(yè)查詢的記錄數(shù)
注:索引從0開(kāi)始
公式:開(kāi)始索引 = (當(dāng)前頁(yè)碼 - 1) * 每頁(yè)查詢的記錄數(shù)
select
字段列表
from
表名
where
條件列表
group by
分組字段
having
分組后的條件
order by
排序字段 排序方式
limit
索引,記錄數(shù)
可以為字段、表起別名
起別名的作用是能夠區(qū)分多張表中的同名字段,并且簡(jiǎn)化了書寫
格式:
注:as 可以省略
概念:對(duì)表中數(shù)據(jù)進(jìn)行限定
分類:
非空約束:not null
唯一約束:unique
主鍵約束:primary key
外鍵約束:foreign key
限定字段值不能為空
創(chuàng)建表時(shí),添加非空約束
創(chuàng)建表后,添加非空約束
注:已存在空值的字段不能被設(shè)置成非空
刪除非空約束(設(shè)置字段允許有空值)
限定字段值不能有重復(fù)
創(chuàng)建表時(shí),添加唯一約束
創(chuàng)建表后,添加唯一約束
刪除唯一約束
注:
唯一約束的值可以是空值,并且允許存在多個(gè) null 值
已經(jīng)存在重復(fù)值的字段不能被設(shè)置成唯一的
一個(gè)字段可以同時(shí)被設(shè)置成非空且唯一的,并且非空和唯一的關(guān)鍵字的順序是任意的
一般主鍵不使用具有特殊含義的字段
特點(diǎn):
非空且唯一
一張表中只能有一個(gè)主鍵字段
主鍵是表中記錄的唯一標(biāo)識(shí)
創(chuàng)建表時(shí),添加主鍵約束
創(chuàng)建表后,添加主鍵約束
刪除主鍵約束
注:刪除主鍵約束后,主鍵仍有非空約束
主鍵自增長(zhǎng):
概念:如果某個(gè)字段是數(shù)值類型的主鍵字段,可以使用 auto_increment 來(lái)實(shí)現(xiàn)主鍵自增長(zhǎng)
創(chuàng)建表時(shí),添加主鍵自增長(zhǎng)
創(chuàng)建表后,添加主鍵自增長(zhǎng)
刪除主鍵自增長(zhǎng)
創(chuàng)建表后,添加主鍵約束的同時(shí)添加自增長(zhǎng)
注:
能添加自增長(zhǎng)功能的必須是主鍵字段
添加主鍵自增長(zhǎng)的主鍵字段必須是數(shù)值類型的
第一條自增長(zhǎng)的字段值是 1
從存在過(guò)的最大值開(kāi)始 +1
如果存在過(guò)的最大值是小數(shù),那么自增長(zhǎng)的值是大于它的最小整數(shù)
外鍵讓表與表之間產(chǎn)生了聯(lián)系,保證了數(shù)據(jù)的完整性
注:從表外鍵的類型必須與主表主鍵的類型一致
創(chuàng)建表時(shí),添加外鍵約束
刪除外鍵
創(chuàng)建表后,添加外鍵約束
創(chuàng)建表后,新建外鍵字段的同時(shí),添加外鍵約束
級(jí)聯(lián)操作:對(duì)主表中的記錄進(jìn)行更新和修改的同時(shí),能直接影響從表中的記錄
創(chuàng)建從表時(shí),添加級(jí)聯(lián)操作
創(chuàng)建從表后,添加級(jí)聯(lián)操作
創(chuàng)建從表后,新建外鍵字段,添加外鍵約束,并添加外鍵的級(jí)聯(lián)操作
一對(duì)一
例如:人和身份證、公司與注冊(cè)地址、汽車與車牌號(hào)
一對(duì)多(多對(duì)一)
例如:部門和員工、商品和分類
多對(duì)多
例如:學(xué)生和課程、商品和訂單
一對(duì)一
在任意一方添加外鍵指向另一方的主鍵,外鍵要保證唯一
一對(duì)多
在多的一方添加外鍵指向一的一方的主鍵
多對(duì)多
需要借助第三張中間表。中間表至少包含兩個(gè)字段,這兩個(gè)字段作為中間表的外鍵,分別指向兩張主表的主鍵。為了保證中間表不會(huì)出現(xiàn)重復(fù)值,需要將這兩個(gè)外鍵字段形成聯(lián)合主鍵。
語(yǔ)法:
交叉查詢的結(jié)果是笛卡爾積,是多張表所有記錄的組成情況
我們需要使用條件來(lái)去除無(wú)效的數(shù)據(jù)
在交叉查詢的基礎(chǔ)上使用 where 條件 去除無(wú)效的數(shù)據(jù)
語(yǔ)法:
隱式內(nèi)連接
顯式內(nèi)連接
注:inner 可以省略
內(nèi)連接查詢的結(jié)果是兩表的交集
語(yǔ)法:
左外連接
右外連接
注:outer 可以省略
左外連接查詢的結(jié)果是左表的全部和兩表的交集
右外連接查詢的結(jié)果是右表的全部和兩表的交集
概念:將一條查詢語(yǔ)句的結(jié)果作為另一條查詢語(yǔ)句的表、記錄、字段、條件
聯(lián)系客服