第一章
概念
- 資料庫定義
- 是一種依照特定資料模型組織、存盤和管理資料的檔案集合,
- 資料庫和普通檔案區別
- 支持不同應用對資料共享訪問;
- 資料管理復雜;
- 可獨立于應用;
- 管理由DBMS實作,
- 資料模型定義
- 描述事物物件的資料結構組成、資料語意聯系、資料約束的抽象結構以及說明,
- 主要資料模型
- 層次資料模型
- 網狀資料模型
- 關系資料模型
- 關系資料模型優缺點
- 優點
- 結構簡單、靈活;
- 支持關系與集合運算;
- 支持
SQL; - 應用廣泛,
- 缺點
- 只支持結構化資料存盤;
- 資料型別簡單;
- 無法支持非結構化資料,
- 優點
DBMS基本功能- 創建…
- 增刪查改…
- 安全控制
- 備份以及恢復
- 四個管理階段
- 人工管理階段
- 檔案系統管理階段
- 資料庫系統管理階段
- 資料庫應用系統型別
- 業務處理系統
- 管理資訊系統
- 決策支持系統
- 系統生命周期
- 需求分析
- 系統分析
- 系統實作
- 系統測驗
- 系統運行與維護
第二章
概念
- 物體定義
- 包含資料特征的事物在概念模型世界中的抽象名稱,
- 關系定義
- 具有關系特征、用于存放物體資料的二維表,
- 鍵定義
- 唯一標識元組的列,
- 復合鍵定義
- 關系中用來唯一標識元組的多列,
- 候選鍵定義
- 關系中可能有多個列作為鍵,則其都是候選鍵,
- 主鍵定義
- 關系中最有代表性的一個候選鍵,
- 主鍵作用
- 唯一標識元組;
- 與關聯表外鍵建立聯系;
- 組織資料存盤;
- 建立索引快速檢索,
- 代理鍵定義
DBMS自動生成的數字序列以作為關系表主鍵,
- 代理鍵作用
- 可代替復合主鍵,獲得更高性能的資料訪問操作,
- 關系模型完整性
- 關系資料模型中對關系實施的完整性約束,
- 包含
- 物體完整性
- 參照完整性
- 用戶自定義完整性
- 物體完整性規則
- 所有主屬性不能取空值,
- 主鍵取值唯一,
- 參照完整性
- 關系表之間需要遵守的資料約束,保證關系之間的資料一致性,
- 通過外鍵實作,
- 用戶自定義完整性
- 用戶根據業務需求自定義的資料約束,
第三章
概念
SQL- 是一種對關系資料庫進行訪問的資料操作語言,
- 是解釋執行的,
操作
資料型別
| 物件 | 型別 |
|---|---|
| 字符 | CHAR、VARCHAR、TEXT |
| 整數 | SMALLINT、INTEGER |
| 浮點數 | NUMBER(n,d)、FLOAT(n,d) |
| 日期 | DATE、DATETIME |
| 貨幣 | MONEY |
操作庫
- 模板
CREATE DATABASE <資料庫名>;
ALTER DATABASE <資料庫名> <修改內容>;
DROP DATABASE <資料庫名>;
操作表
CREATE TABLE <表名>
(
...
<屬性名> <資料型別> [完整性約束],
...
CONSTRAINT <主鍵名> PRIMARY KEY(<屬性名>),
CONSTRAINT <外鍵名> FOREIGN KEY(<屬性名>)
REFERENCES <關聯表名>(<屬性名>)
);
ALTER TABLE <表名> <修改方式>;
DROP TABLE <表名>;
- 完整性約束
| 關鍵詞 | 作用 |
|---|---|
| PRIMARY KEY | 主鍵 |
| NOT NULL | 非空值 |
| NULL | 空值 |
| UNIQUE | 值唯一 |
| CHECK | 有效性檢查 |
| DEFAULT | 預設值 |
操作索引
CREATE INDEX <索引名> ON <表名>(<屬性名>);
ALTER INDEX <索引名> <修改項>;
DROP INDEX <索引名>;
插入操作
INSERT INTO <表名> VALUES (屬性值);
更新操作
UPDATE <表名> SET <屬性名>=<運算式>
WHERE <條件運算式>;
DELETE FROM <表名>
WHERE <條件運算式>;
查詢陳述句
SELECT <屬性名> INTO <新表名> FROM <表名>
WHERE <條件運算式>
BETWEEN <屬性值> AND <屬性值>
WHERE <條件運算式>
LIKE <屬性值>
GROUP BY <屬性名>
ORDER BY <屬性名> [DESC|ASC]
- 內置函式
| 聚合函式 | 功能 |
|---|---|
| AVG() | 平均值 |
| COUNT() | 行數 |
| MIN() | 最小值 |
| MAX() | 最大值 |
| SUM() | 總和 |
- 分類統計
SELECT Major AS 專業 COUNT StudentID AS 學生人數
FROM Student
WHERE StudentGender=‘男‘
GROUP BY Major
HAVING COUNT(*)> 2;
- 子查詢
SELECT TeacherID,TeacherName,TeacherTitle
FROM Teacher
WHERE CollegeID IN
(
SELECT CollegeID
FROM College
WHERE CollegeName='計算機學院'
);
- 關聯多表查詢
SELECT B.CollegeName AS 學院名稱,A.TeacherID AS 編號,A.TeacherName AS 姓名,A.TeacherGender AS 性別,A.TeacherTitle AS 職稱
FROM Teacher AS A,College AS B
WHERE A.CollegeID=B.CollegeID
ORDER BY B.CollegeName,A=TeacherID;
- 連接查詢
SELECT B.CollegeName AS 學院名稱,A.TeacherID AS 編號,A.TeacherName AS 姓名,A.TeacherGender AS 性別,A.TeacherTitle AS 職稱
FROM TEACHER AS A JOIN COLLEGE AS B
ON A.CollegeID=B.CollegeID
ORDER BY B.CollegeName,A.TeacherID;
- 外部連接
SELECT C.CourseName AS 課程名稱, T.TeacherName AS 教師,
COUNT(R.CoursePlanID) AS 選課人數
FROM COURSE AS C JOIN PLAN AS P ON C.CourseID=P.CourseID
JOIN TEACHER AS T ON P.TeacherID=T.TeacherID
JOIN REGISTER AS R ON P.CoursePlanID=R.CoursePlanID
GROUP BY C.CourseName, T.TeacherName;
資料控制
GRANT <權限串列> ON <資料庫物件> TO <用戶|角色>;
REVOKE <權限串列> ON <資料庫物件> FROM <用戶|角色>;
DENY <權限串列> ON <資料庫物件> TO <用戶|角色>;
視圖
CREATE VIEW <視圖名> AS
<SELECT查詢>;
SELECT * FROM <視圖名>;
DROP VIEW <視圖名>;
- 例子
CREATE VIEW BasicCourseView AS
SELECT CourseName,CourseCredit,CoursePeriod,TestMethod
FROM COURSE
WHERE CourseType='基礎課';
SELECT *
FROM BasicCourseView
ORDER BY CourseName;
DROP VIEW BasicCourseView;
第四章
概念
- 開發程序
- 資料需求分析
- 資料庫設計階段
- 資料庫實作階段
- 資料庫測驗階段
- 資料模型
- 概念資料模型
CDM- 以用戶角度
- 邏輯資料模型
LDM- 從系統分析員角度
- 物理資料模型
PDM- 從系統設計人員角度
- 概念資料模型
E-R模型- 物體-聯系模型
- 描述現實世界概念資料模型、邏輯資料模型的有效方法,
- 規范化資料庫設計的原因
- 減少資料冗余
- 資料完整性和一致性
- 系統對資料高效訪問
- 函式依賴
- 一個屬性確定了,另一個屬性也隨之確定了,
- 完全函式依賴
- 表明函式依賴的決定因子中的最小屬性集,
- 否則為部分函式依賴,
- 屬性傳遞依賴
- 屬性如果不是一一對應,可以根據屬性之間的依賴關系,進行傳遞,
- 多值依賴
- 屬性間的一對多聯系,
- 規范化范式
- 關系表符合規范化程度的模式,
| 模式 | 程度 |
|---|---|
| 第一范式 | 屬性不可細分 |
| 第二范式 | 消除部分函式依賴 |
| 第三范式 | 切斷傳遞函式依賴 |
| BCNF | 決定因子都是候選鍵 |
| 第四范式 | 消除多值依賴 |
第五章
概念
-
資料庫管理原因
- 規模擴大,系統變復雜
- 多用戶帶來訪問復雜性
- 安全和隱私非常重要
- 意外事件
-
資料庫管理目標
- 保障系統正常運行
- 發揮系統軟硬體處理能力
- 確保用戶資料安全
- 管理用戶權限
- 解決優化等問題
- 發揮作用
-
ACID特性- 原子性
- 一致性
- 隔離性
- 持續性
-
事務不能實作
- 對資料庫的操作
- 日志操作
- 權限賦予
-
并發控制的原因
- 并發可能帶來資料不一致、事務死鎖等問題,
-
并發控制需解決的問題
- 丟失更新資料
- 不可重復讀/幻讀
- 臟資料讀
-
可串行化調度
- 事務中資料操作順序的結果和事務串行執行結果一樣時,并發事務調度才能保證操作的正確性和一致性,
-
加鎖訪問
- 排它鎖定
- 不允許其他事務加鎖
- 共享鎖定
- 只允許其他事務加讀取鎖
- 排它鎖定
-
鎖的相容性
| 排它鎖 | 共享鎖 | 無鎖 | |
|---|---|---|---|
| 排它鎖 | 否 | 否 | 是 |
| 共享鎖 | 否 | 是 | 是 |
| 無鎖 | 是 | 是 | 是 |
| 鎖協議 | 排它鎖 | 共享鎖 | 更新丟失 | 臟資料讀 | 不可重復讀 |
|---|---|---|---|---|---|
| 一級加鎖協議 | 全程加 | 不加 | √ | × | × |
| 二級加鎖協議 | 全程加 | 讀完釋放 | √ | √ | × |
| 三級加鎖協議 | 全程加 | 全程加 | √ | √ | √ |
二級和三級加鎖協議都是在一級基礎上的,
- 二階段鎖定協議
- 每個事務的加鎖解鎖分為兩個階段,
- 事務隔離級別
- 級別越高,資料不一致可能越小,系統吞吐量也越小,
- 安全模型
- 身份認證
- 權限控制
- 系統防護
- 加密存盤
操作
事務
START TRANSACTION;
<SQL>;
...
COMMIT;
START TRANSACTION;
<SQL>;
...
ROLLBACK;
START TRANSACTION;
<SQL>;
...
SAVEPOINT <保存點名>;
...
ROLLBACK <保存點名>;
用戶
CREATE USER "userA" WITH
LOGIN
NOSUPERUSER
NOCREATEDB
NOCREATEROLE
INHERIT
NOREPLICATION
CONNECTION LIMIT -1
RASSWORD '123456';
ALTER USER "userA"
CONNECTION LIMIT 10;
DROP USER userA;
GRANT SELECT ON COURSE TO userA;
角色
CREATE ROLE "Role_Manager" WITH
LOGIN
CONNECTION LIMIT -1;
GRANT SELECT ON COURSE TO "Role_Manager";
備份
BACKUP DATABASE CourseDB TO DISK="D:\CourseDB.bak";
RESTORE DATABASE CourseDB FROM DISK="D:\CourseDB.bak";
第六章
概念
JDBC訪問資料庫步驟- 應用程式開始
- 匯入
java.sql包 - 加載并注冊驅動
- 創建
Connection物件 - 創建
Statement物件 - 執行
SQL - 使用
ResultSet物件回傳結果 - 關閉
ResultSet物件 - 關閉
Statement物件 - 關閉
Connection物件 - 結束
- 觸發器
- 可實作復雜的資料完整性,
- 本身是一個特殊的事務單位,
- 由
INSERT、UPDATE、DELETE觸發而被動執行, - 必須定義在表或視圖上,
- 觸發器的特殊變數
NEW:值為改變之后的行,OLD:值為改變之前的行,TG_OP:值為引發觸發器的操作,
操作
JDBC
- 加載驅動
Class.forName("org.postgresql.Driver");
- 建立連接
String url = "jdbc:postgresql://localhost:5432/testdb";
String usrName = "admin";
String pasWord = "password";
connection conn = DriverManager.getConnection(url,usrName,pasWord);
- 創建
Statement
Statement stat = conn.createStatement();
- 執行
SQL陳述句
String sql = "INSERT INTO STUDENT"
+ " VALUES('201909','DD','男');";
stat.executeUpdate(sql);
String sql = "SELECT id,name,gender FROM company;"
ResultSet rs = stat.executeQuery(sql);
- 列印結果
while(rs.next()){
System.out.println(rs.getString("id"));
}
- 關閉連接
rs.close();
stat.close();
conn.close();
存盤程序
- 創建
CREATE OR REPLACE FUNCTION countRecords()
RETURNS INTEGER
AS $COUNT$
DECLARE
count integer;
BEGIN
SELECT COUNT(*) INTO count FROM STUDENT;
RETURN count;
END;
$COUNT$ LANGUAGE plpgsql;
- 執行
SELECT * FROM countRecords();
- 洗掉
DROP FUNCTION IF EXISTS countRecords();
PL/SQL語法
- 條件
IF count>0 THEN
count = count - 1;
ELSIF count<0 THEN
count = count + 1;
ELSE
EXIT;
END IF;
- 回圈
LOOP
count=count+1;
EXIT WHEN count>100;
END LOOP;
WHILE count>0 LOOP
count=count-1;
END LOOP;
FOR i IN 1...10 LOOP
RAISE NOTICE 'i=%',i;
END LOOP;
FOR rec IN SELECT id,name FROM STUDENT LOOP
RAISE NOTICE "ID:%,NAME:%",rec.id,rec.name;
END LOOP;
觸發器
- 構造觸發器函式
CREATE OR REPLACE FUNCTION score_audit()
RETURNS TRIGGER
AS $SCORE$
BEGIN
IF (TG_OP = "DELETE")THEN
INSERT INTO AUIT SELECT OLD.ID,OLD.SCORE;
RETURN OLD;
END IF;
RETURN NULL;
END;
$SCORE$ LANGUAGE plpgsql;
- 操作觸發器
CREATE TRIGGER AUDIT_TRIGGER
AFTER DELETE OR INSERT
ON STUDENT
FOR EACH ROW EXECUTE PROCEDURE score_audit();
ALTER TRIGGER AUDIT_TRIGGER ON STUDENT RENAME TO AT;
DROP TRIGGER IF EXISTS AUDIT_TRIGGER ON STUDENT CASCADE;
游標
- 定義
CURSOR_NAME REFCURSOR FOR SELECT * FROM STUDENT;
CURSOR_NAME REFCURSOR(KEY INTEGER) IS SELECT * FROM STUDENT WHERE SID=KEY;
- 打開
OPEN CURSOR_NAME FOR QUERY;
OPEN CURSOR_NAME EXECUTE QUERY_STRING;
OPEN CURSOR_NAME;
前兩個適用于未系結的,后面那個適用于系結過的,
- 使用游標
FETCH CURSOR_NAME INTO ID,NAME;
IF FOUND THEN
...
END IF;
- 關閉游標
CLOSE CURSOR_NAME;
第七章
概念
- 分布式檔案系統
- 檔案系統的資源不存盤在本地節點,
- 分布式資料庫=資料庫+網路技術
5V特征- 超量
Volume - 高速
Velocity - 異構
Variety - 真實
Veracity - 價值
Value
- 超量
NoSQL性質- 易擴展
- 資料模型靈活
- 高可用性
- 大資料量
- 高性能
- 分布式資料庫不一致原因
- 多個副本
- 單點網路故障
- 通信網路故障
- 分布式提交等
- 分布式環境要求
CAP- 一致性
- 可用性
- 磁區容忍性
BASE- 基本可用
- 軟狀態
- 最終一致性
NoSQL定義- 一個非關系資料存盤系統
- 不單指一個產品或技術,它代表一族產品,也是一個概念,
NoSQL技術- 簡單資料型別:鍵值
- 元資料與應用資料分離
NoSQL特點- 優點
- 高可擴展性
- 分布式計算
- 低成本
- 架構靈活
- 半結構化資料
- 關系簡單
- 缺點
- 沒有標準化
- 查詢功能有限
- 不直觀
- 優點
- 列存盤資料庫
- 把一列中的資料值串在一起存盤
- 例:
HBASE
- 鍵值對資料庫
- 每行記錄由主鍵和值兩個部分組成
- 例:
Redis
- 檔案資料庫
- 將資料存盤為一個檔案
- 例:
MongoDB
- 圖形資料庫
- 通過關系來連接各個節點
- 例:
Neo4J
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/286463.html
標籤:其他
上一篇:MyBatis-07-筆記
下一篇:MYSQL DDL和DML
