第一章小結:
數據庫是一種按特定數據模型組織、存儲和管理數據的文件
數據模型是描述數據、數據間關係及其約束的形式描述
關係模型是目前大多數數據庫採用的數據模型
數據庫系統:由用戶、數據庫應用程序、DBMS、數據庫組成
DBMS是一類用於建立、操縱和管理數據庫的系統軟件
DBMS有多種類型、多種功能
數據庫應用系統與其它軟件系統同樣,分多個階段完成開發
我的數據庫系統與企業級數據庫系統分別面向不一樣場合
數據庫應用結構:集中式結構、客戶/服務器結構、分佈式結構
Access軟件既是一個桌面數據庫管理系統,又是一個應用工具
第二章小結
問題:什麼是關係數據庫?
採用關係數據模型組織、存儲和管理數據的數據庫。
行:元組 列:屬性 關係:表
能夠把主鍵看做一個固定了的候選鍵(主鍵非空,外鍵非空)
代理鍵是自動生成的數字序列,代替複合主鍵
參照完整性就是指兩個表的主鍵取值要對應外鍵。但列名不必定要一致。
對關係數據模型的描述:
三個方面:
數據結構:二維表
數據操做:基於關係代數的數據集合操做
數據約束:
實體完整性約束
參照完整性約束
用戶自定義約束
函數依賴:屬性依賴於主鍵 寫做:主鍵->(屬性)
在一個表中存在多組函數依賴,則說明關係不規範,拆分紅只有一組函數依賴的關係表
第三章小結
列約束字句
check的用法
check(屬性 in (’a’,’b’)),在這兩個裏面選一個有效
unique 值惟一
default缺省 default’a’,
表約束
主鍵:constraint x_pk primary key(a,b),(可用列約束可用表約束)
代理鍵:identity (m,n) m是初值,n是增量
外鍵:只能用表約束。constraint a_fk foreign key(a)
reference 另外一個表表名(主鍵名)
On update cascade
在有參照完整性約束的狀況下刪除表會報錯
建立索引:create index a on表+列 做用:快速查詢
數據操縱sql語句:
插入:insert into table values(‘ ‘,'')
修改:update table
Set a(列名)=‘'
Where b(主鍵名)=''
刪除:刪除一行:delect from table
Where a=‘’,
查詢語句:
select (能夠打*號)
from table
where 條件 (where sth between a and b)(sth like %sth %指代任意字符,like是一種匹配)
書上只有where用了and,其餘地方並列都用逗號
group by(having)
order by 列名 排序,默認升序,降序用desc,升序勇asc
內置函數:count(*) as 名稱 from
Min(列名),max(列名) //注意在後面用as給查詢結果的列命名
Len(列名),char字符的長度
Group by相似於order by 是對查詢結果的操做,它能夠將查詢結果按照屬性分組,並在組內進行操做
having 是表示限定條件 ,having 條件
unique和distinct的區別,前者是表約束,後者是列約束
group的理解:group通常和聚合函數一塊兒用,group by 有一個原則,就是 select 後面的全部列中,沒有使用聚合函數的列,必須出如今 group by 後面或者包含在having 後的聚合函數裏。
where和having 的區別,where是在分組前的篩選,having是在分組後的篩選。內置函數通常不放在where中。having限制的是組不是列(它的處理範圍是在組間)
多表關聯查詢:
子查詢: where 主鍵 in
(
Select 外鍵
Balabala
)
鏈接查詢:經常使用,注意在where中找到主鍵外鍵相等便可 善用as
from a join b on 外鍵等於主鍵:就是鏈接查詢中把from和where合用
外鏈接查詢:當查詢結果不匹配的時候,想要輸出不匹配的內容,就要用到外鏈接。由於以上的方法都是在匹配的前提下獲得的。
Left/right/full join on(就是正常的join函數加一個前綴)
建立視圖:create view as
本章細節:sql語言類型:
數據 定義/操做/查詢/控制
第四章小結
e-r實體關係類型:
| 表示強制 。
表示可選 單線表示最小0最大1,多線表示最小0最大n,可是強制類型最小爲1。
繼承關係:完整繼承(子類包含父類的全部狀況),比繼承多一個橫線,非完整繼承又有橫線又有叉
存在一個箭頭指向父類
互斥關係:子類互不兼容。 圖中有一個叉
第五章:
數據庫模型:概念數據模型;邏輯數據模型;物理數據模型;
標識符是邏輯概念,主鍵是物理概念
實體類型:強實體。 弱實體:依賴其餘實體才能存在
若是弱實體屬性中存在依賴實體的標識符的屬性,就是id依賴。在圖中須要畫一個三角形,三角形的頂點指向強實體。
刪除強實體以前要先刪除全部依賴的弱實體
概念數據模型的設計:
自頂向下/自底向上/自內而外 /混合策略
邏輯模型到物理模型的轉換:
非id依賴:主鍵仍是弱實體的標識符不變, 但把強實體的標識符放入弱實體做爲屬性之一
ID依賴:強實體標識符放入後和弱實體的標識符一塊兒構成複合主鍵
1:1關係的轉換:主鍵外鍵不區分
1:n關係:將1表明的實體的標識符放入n表明的實體。可是不構成複合主鍵(主鍵不變)
M:n關係:須要中間關聯表:包含以前兩表的全部標識符並做複合主鍵
繼承關係的轉換:
父表中的主鍵放入子表,作主鍵和外鍵
函數依賴:
形式:決定因子->依賴函數
類型:
徹底/部分/傳遞/多值%函數依賴
部分:複合主鍵中,屬性只依賴於主鍵的一部分
多值:非主屬性互相之間都依賴
傳遞:x->y,y->z
關係式不規範的緣由:
存在多個函數依賴關係
關係規範化範式:六種
第一範式:屬性不可再分
第二:消除部分依賴
第三:消除傳遞
巴斯德範式:全部函數依賴的決定因子都是候選鍵(決定因子要惟一)
第四範式:茶消除多值依賴
規範化程度太高:形成數據庫性能降低。
反規範化:下降規範化程度:合併表
第六章重點
事務:概念:單個業務處理單元的一組數據庫訪問操做
(默認一句sql語句爲一個事務)
性質:要麼成功要麼失敗,不能部分
是dbms執行任務的最小單元/最小併發控制/最小故障恢復,可推上面
特性:asid
原子性:不可分->要麼成功要麼失敗
一致性:屢次結果一致
隔離性:不相互影響
數據的改變是永久的
事務sql語言:
開始:begin transaction
回滾:rollback
提交:commit
數據保存:save transaction
事務編程:
Begin
數據操做/查詢語言
if error
Rollback
Commit
事務編程中不能對數據庫進行操做,能夠對數據進行操做
併發控制:防止數據不一致/死鎖
數據故障分類:
不可重複讀:兩次讀的過程當中,另外一個線程對數據的修改
髒讀: 回滾過程當中另外一個線程對數據的讀取
幻想讀://相似不可重複讀
丟失更新:兩個數據修改進程交叉進行,其中一個作無用功
解決方法:併發事務調度:
要想解決問題->調度順序:可串行化調度
具體方案:
事務鎖:
二階段鎖定協議:事務分兩階段:
增加:只能得到鎖,不能釋放
縮減:釋放鎖,不能得到
二階段鎖定就能保證串行化
鎖:
鎖的分類:
排它鎖:鎖定後不容許讀寫(也不能容許別的進程對它加鎖)
共享鎖:鎖定後不容許寫,能夠讀
資源鎖定粒度:
粒度:數據的粗放程度
從數據庫到元組,粒度愈來愈小
加鎖協議
一級加鎖協議:修改共享數據以前加排它鎖,事務結束後釋放 問題:不可重複讀 髒讀
二級加鎖協議:一級基礎上,針對讀操做,加共享鎖,讀完就釋放 問題:不可重複讀
三級加鎖協議:與二級不一樣的是事務結束後才釋放共享鎖
死鎖:兩個進程都在等待對方進行。宕機
死鎖的解決方法:回滾一個操做
數據庫備份與恢復
恢復:從備份副本中恢復
備份方式:
備份文件恢復:
事務日誌回滾:
第七章重點
數據庫應用程序結構
表現層
業務邏輯層
數據訪問層
數據庫應用程序的開發
軟件
數據庫
數據庫鏈接技術
Odbc 微軟對數據庫訪問的一組api
Jdbc java API:創建與數據庫的鏈接 發送sql語句 處理結果
Esql 嵌入式sql,把sql嵌入到宿主語言中
Web數據庫系統
Jsp
遊標編程
遊標是從結果集中每次提取一條記錄的方法
存儲過程:
相似於腳本
Create procedure a
A char(10)
B varchar(20) output
As
Select b from ~~~
Where a=~~~
觸發器
特殊的存儲過程:觸發以後自動執行
當數據操做語句對特定表的數據進行操做的時候獲得觸發,保證對數據的處理符合語句定義的規則
即實現參照完整性和數據一致性
觸發器性能通常較低
觸發器的組成:
事件
條件
動做
Create trigger A
On table1
For update
as
If update(STUDENTid)
Begin
Update table2
Set a.studentid=b.studentid
From table1 as a,table2 as b
Where a.x=b.x