1、對數據庫施加數據完整性約束的作用
防止數據庫中存在不符合語義的數據,維護數據庫完整性
隨時檢測更新狀態數據庫內容是否符合完整性約束,保障數據一致性與正確性
防止對數據庫的惡意破壞,體改完整性檢測的效率,減輕數據庫編程人員負擔
2、完整性約束條件的作用對象可以是列、元祖、表
列:字段的類型、空值、取值範圍、精度等約束
元祖:字段之間的約束,開始日期小於結束期
表:主鍵和外鍵之間的約束
3、定義與實現完整性約束
(1)實體完整性約束:指關係的主屬性,即主碼的組成不能爲空,也就是關係的主屬性不能是NULL
(2)參照完整性約束:定義外碼和主碼之間的引用規則,它是對關係間引用數據的一種限制
(3)用戶定義的完整性約束:針對某一應用環境的完整性約束條件,它反應了某一具體應用所涉及的數據應滿足的條件
check約束:在創建表或更新表同時,根據用戶的實際完整性要求定義的。
4、使用SQL實現命名完整性約束
5、使用SQL實現更新完整性約束
CREATE TABLE table_name(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL DEFAULT "",
PRIMARY KEY(id),
FOREIGN KEY(shcool_id)
REFERENCE school(id)
ON DELETE RESTRICT
ON UPDATE RESTRICT
);
CASCADE:父表delete、update的時候,子表會delete、update掉關聯記錄;
SET NULL:父表delete、update的時候,子表會將關聯記錄的外鍵字段所在列設爲null,所以注意在設計子表時外鍵不能設爲not null;
RESTRICT:如果想要刪除父表的記錄時,而在子表中有關聯該父表的記錄,則不允許刪除父表中的記錄;
NO ACTION:同 RESTRICT,也是首先先檢查外鍵;
6、觸發器
CREATE TRIGGER trigger_name AFTER UPDATE ON table_name FOR EACH ROW SET NEW.name = OLD.name;
DROP TRIGGER IF EXISTS trigger_name;
7、SQL語言安全控制中的訪問控制的作用,兩種方式用戶賬號和權限管理
存儲在名爲mysql的數據庫user表中,包含所有用戶帳號。
需要爲用戶分配訪問適當的權限。
8、用戶賬號管理
CREATE USER 'admin'@'127.0.0.1' IDENTIFIELD BY '123456',
'hongda'@'127.0.0.1' IDENTIFIELD BY PASSWORD 'afrwefwe';
DROP USER [email protected];
RENAME USER 'hongda'@'127.0.0.1' TO 'hong'@'127.0.0.1';
SET PASSWORD FOR 'hongda'@'127.0.0.1' = 'asfohwoiefhowihefoiw';
9、用戶權限管理
GRANT SELECT(id,name) ON table_name TO 'hongda'@'127.0.0.1';
GRANT SELECT,UPDATE ON table_name TO 'hongda'@'127.0.0.1',
'admin'@'127.0.0.1'
WITH GRANT OPTION;
10、事務與併發控制的概念
併發控制:對併發操作提供一定的控制,防止他們互相干擾,從而保證數據庫的正確性不被破壞,避免數據庫不一致性;
事務:用戶定義的一個數據操作序列,這些操作可以作爲一個完整的工作單元,要麼全部執行,要麼全部不執行,是一個不可分割的工作單位;
11、事務的特徵ACID
原子性、一致性、隔離性、持續性
12、併發操作的問題
丟失更新
不可重複讀
讀髒數據
13、封鎖
封鎖作爲一種常用的併發控制技術,用於解決併發操作所帶來的數據不一致性問題
基本思想:事務通過向系統請求對它所希望的數據對象加鎖,以確保它不被非預期修改
(1)鎖:允許或阻止一個事務對一個數據對象的存取特權。排它鎖(X鎖)、共享鎖(S鎖)
(2)用封鎖進行併發控制:
事務對數據加了X鎖,只有當事務結束後,纔可對數據做存取
事務對數據加了S鎖,其他事務可以繼續施加S鎖。X鎖必讀等待S鎖全部釋放纔可請求
事務執行數據庫操作時先請求相應的鎖,由DBMS隱式執行
事務一直戰友獲得的鎖,當ROLLBACK或COMMIT時釋放
(3)封鎖的粒度
粒度描述封鎖的數據單元的大小。粒度越細,併發越高,軟件複雜性和系統夠開銷也大。對數據庫加鎖,粒度最大,數據存取只能順序執行,性能大大下降。
(4)封鎖的級別
又稱爲一致性級別或隔離度。與封鎖期限有關,有的只是數據單元的存取期,有的是整個事務的存取期。
0級封鎖:封鎖的事務不重複寫其他非0級封鎖事務的爲提交的更新數據
1級封鎖:被封鎖的事務不允許重寫未提交的更新數據
2級封鎖:被封鎖的事務既不重寫也不讀未提交的更新數據
3級封鎖:被封鎖的事務不讀未提交的更新數據,不寫任何未提交數據
(5)活鎖與死鎖
活鎖:併發事務處理過程中,由於鎖會使一事務處於等待狀態而調度其他事務,因而該事務可能因爲優先級低永遠等待下去。
死鎖:兩個以上事務循環等待被同組中另一事物鎖住的數據單元的情形
死鎖解決方法:一次性鎖請求、鎖請求排序、序列化處理、資源剝奪
(6)可串行性
一組事務的一個調度就是他們基本操作的一個排序。一個調度中,任意兩個事務T1和T2,要麼T1所有操作都在T2之前,要麼之後,則該調度是可串行的。
(7)兩段封鎖法
任意一個事務中,所有加鎖操作都必須在所有釋放鎖操作之前。
14、備份與恢復
概念:備份是指通過導出數據或複製表文件的方式製作數據庫的副本;恢復是指當前數據庫遭到破壞時,將備份加載到系統中,使數據庫從錯誤狀態恢復到正確狀態。
作用:
保證數據庫的可靠性和完整性
可以用於數據恢復
通過導出數據或者複製表文件的方式製作數據庫的副本
SELECT * FROM table_name INTO OUTFILE 'C://table_name.txt';
LOAD DATA INFILE 'C://table_name.txt' INTO TABLE table_name;