MySQL-003-又看花落時

又看花落時,主要是來回顧某項知識的基礎的,溫故而知新吧。

數據庫基本概念

數據庫系統的特點:
一:數據結構化(也是數據庫系統也文件系統的本質區別)
二:數據的共享性高,冗餘度低,易擴展
三:數據獨立性高(包括物理獨立性和邏輯獨立性)
四:數據由DBMS統一管理和控制

信息世界中的基本概念
實體,屬性,碼,實體型,實體集,聯繫。
實體:客觀存在並可相互區別的事物成爲實體。
實體型:用實體名及其屬性名集合來抽象同類實體,稱爲實體型。例如,學生(學號,姓名,性別)就是個實體型。
實體集:同一類型的實體的集合就稱爲實體集,例如,全體學生。
聯繫:一對一,一對多,多對多。

關係數據結構中的概念
域:是一組具有相同數據類型的值的集合。
笛卡爾積:
候選碼:關係中某一屬性組能唯一標識一個元組,而其子集不能,則稱該屬性組爲候選碼。
主碼:從候選碼中選定一個作爲主碼。
主屬性:候選碼的諸屬性稱爲主屬性。
非主屬性:不包含在候選碼中的屬性稱爲非主屬性。
全碼:關係模式中所有屬性都是這個這個關係模式的候選碼

關係類型可以分爲三種

基本關係(或者稱爲基本表) 查詢表 視圖表
基本表是實際存在的表,是實際存儲數據的邏輯表示 查詢表是查詢結果對應的表 視圖表是由基本表或者其他視圖表導出的表是虛表,不對應實際存儲的數據

關係模型中要求關係必須是規範化的,其中一天最基本的就是:關係的每個分量必須是不可分割的數據項。規範化的關係簡稱爲範式Normal Form, NF

關係操作

選擇,投影,並,差,笛卡爾積是五種基本操作。其他操作都可以由這五種基本操作定義或者導出。
SQL語言是Structured Query Language 結構化查詢語言

關係模型中的完整性

實體的完整性 參照的完整性 戶定義的完整性
A是基本關係R的主屬性,則A不能爲空。也就是“不知道”或者“不存在”或者“無意義” 若屬性F是基本關係R的外碼, 他與基本關係S的主碼Ks相對應(基本關係R和S不一定是不同關係),則對於R中每個元組在F上的值必須取空或者等於S中某個元組的主碼值 用戶定義的完整性是指針對某一具體關係數據庫的約束條件,它反映魔衣具體應用所涉及的數據必須滿足的語義要求。例如:學生的成績屬性必須定義在0~100之間

任何關係型數據庫都應該支持實體的完整性和參照的完整性。

關係運算有:交,並,差,笛卡爾積,選擇,投影,連接,除運算等。
自然連接是一種特殊的等值連接,它要求兩個關係中進行比較的分量必須是同名的屬性組,並在結果中把重複的屬性列去掉。
自然連接 又有一些概念,例如懸浮元組,外連接。外連接中又有左外連接和右外連接。
除運算 定義:設關係R除以關係S的結果爲關係T,則T包含所有在R但不在S中的屬性及其值,且T的元組與S的元組的所有組合都在R中。
重點是除運算是同時從行和列的角度進行運算的。
除運算示例
要理解除運算也要理解象集的概念。
在關係R中屬性A可以取四個值{a1,a2,a3,a4}其中
a1的象集爲{(b1,c2),(b2,c3),(b2,c1)}
a2的象集爲{(b3,c7),(b2,c3)}
a3的象集爲{(b4,c6)}
a4的象集爲{(b6,c6)}
S在(B,C)上的投影爲{(b1,c2),(b2,c3),(b2,c1) }.
顯然只有a1的象集包含了S在(B,C)上的投影所以
R÷S={a1}。
除運算舉例:
查詢至少選修1號課程和3號課程的學生的學號。
可以首先建立一個臨時關係K:

con
1
3

然後將 SC÷K 投影出學生的學號即可。(SC是StudentCourse學生選課表)

SQL

一個關係數據庫管理系統的實例中可以建立多個數據庫—–》一個數據庫中可以建立多個模式—–》一個模式下通常包括多個表,視圖和索引等數據庫對象。

SQL數據定義語句

定義模式實際上是定義了一個命名空間,在這個空間中可以進一步定義該模式包含的數據庫對象,如:基本表,視圖,索引等。

創建索引
CREATE UNIQUE INDEX SCno ON SC ( Sno ASC , Cno DESC );
在SC表上創建一個名爲SCno的索引,按照Sno升序,Cno降序排列。

WHERE與條件查詢語句參P92.

常用聚集函數
COUNT( ) ; SUM( ) ; AVG( ) ; MAX( ) ; MIN( ) ;

GROUP BY
分組語句,將查詢結果按照某一列或者幾列的值分組,值相等的爲一組。
分組的目的是爲了細化聚集函數的作用對象,如果未分組,則聚集函數將作用於整個查詢結果。如果分組之後,還要在分組的基礎上按照一定的條件對這些組進行篩選,使得最終只輸出滿足指定條件的結果,則要使用HAVING短語指定進行篩選。
(此處要注意WHERE語句和HAVING語句的區別在於作用對象不同,WHERE作用於基本表或者視圖,從中篩選出滿足條件的元組。HAVING作用於(也就是在GROUP BY 語句基礎上分出來的組),從中選擇滿足條件的元組。
以下舉例幫助理解

例一:
查詢選修了三門以上課程的學生學號
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT( * )>3 ;
解析:HAVING 下的COUNT (*)是在GROUP BY分組的基礎上進行的計數統計,而非作用於整個基本表。

例二
查詢平均成績大於等於90分的學生的學號和平均成績
SELECT Sno , AVG (Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90 ;

**連接查詢**P102
自身連接,外連接(涉及到懸浮組),多表連接。
注:可以查看P100中關於連接查詢時的算法是基本思想。
左外連接查詢
SELECT Sname
FROM Student LEFT OUTER JOIN SC ON ( Student.Sno = SC.Sno )

嵌套查詢
一個SELECT-FROM-WHRER語句稱爲一個查詢塊,將一個查詢塊的套在另外一個查詢塊的WHERE子句中或者HAVING短語的條件中的查詢語句稱爲嵌套查詢。 以層層嵌套的方式來構造程序正是SQL中“結構化”的含義所在。
注意嵌套查詢中有相關子查詢和不相關子查詢,相關子查詢都可以用多表查詢來代替實現。注意理解不相關子查詢的執行過程,以及相關子查詢與不相關子查詢之間的區別。P106

ANY(SOME),ALL,EXISTS(只返回false或true,不返回數據)
UNION:並操作 (會合並重復元組)
INTERSECT : 交集。
EXCEPT : 差集。

基於派生表的查詢

注意的是:通過FROM子句生成派生,AS關鍵字可以省略,但是必須爲關係指定一個別名。P114
示例:
SELECT Sname
FROM Student,(SELECT Sno FROM SC WHERE Cno = ’ 1 ‘)AS SC1
WHERE Student.Sno=SC1.Sno;

**數據更新**P116
插入基本有兩種形式,一:直接插入數據。二:插入子查詢的結果。
INSERT
INTO Student(Sno,Sage)
VALUES(‘6103113103’,18);

INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept , AVG(age)
FROM Student
GROUP BY Sdept;

**更新數據**P118
除非是有WHERE語句指定更新哪個元組,否則更新整個表。
示例
UPDATE Student
SET Sage = 22
WHERE Sno = ‘6103113103’

UPDATE Student
SET Sage = Sage +1;

UPDATE SC
SET Grade = 0
WHERE Sno IN (
SELECT Sno
FROM Student
WHERE Sdept = ‘CS’);

刪除
DELETE功能是從指定表中刪除WHERE子句條件的所有元組。

刪除某個元組
DELETE
FROM Student
WHERE Sno=’6103113103’;

刪除多個元組值
DELETE
FROM SC;

帶子查詢的刪除語句
DELETE
FROM SC
WHERE Sno IN(
SELECT Sno
FROM Student
WHERE Sdept=’CS’);

判斷空值
判斷空值應該用 IS NULL 或者 IS NOT NULL 來判斷,而不要用 = NULL這樣的來判斷。

視圖

定義:視圖是從一個或者多個基本表上導出的表,是個虛表。數據庫只存放視圖的定義,不存放視圖對應的數據。所以一旦基本表中的數據發生改變,從視圖中查詢的數據也就隨之改變了。
視圖一但被定義,就可以像基本表那樣被查詢,刪除。但是對視圖的更新(增,刪,該)就會有一定的限制(可以理解,畢竟是個虛表)。

建立視圖
建立在一個表上的視圖
CREATE VIEW IS_Student
AS
SELECT *
FROM Student
WHERE Sdept=’IS’
WITH CHECK OPTION;
加上WITH CHECK OPTION 時在更新視圖時,就會檢查是否符合Sdept=’IS’的條件,否則不會檢查。

建立在多個表上的視圖
CREATE VIEW IS_Student(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno AND Sdept=’IS’ AND Con=’1’;

刪除視圖
DROP VIEW IS_Student CASCADE;

查詢視圖
查詢視圖和查詢基本表是一樣的。
注:視圖與派生表的區別==》視圖一旦被定義,其定義就會被永遠存儲在數據字典中,之後的所有查詢都可以使用該視圖。而派生表只是在語句執行時臨時定義,語句執行之後就會被刪除。

更新視圖 P126
視圖的更新是指通過視圖來 INSERT , DELETE , UPDATE 數據。
由於視圖是不實際存儲數據的虛表,因此對視圖的更新最終要轉換爲對基本表的更新。並不是所有的視圖都可以更新如果對應的基本表中沒有對應屬性的話。

權限

P142
授權
把查詢Student表和修改學生學號的權限給用戶U4(針對某一列的屬性的授權時必須明確指出相應的屬性列名)
GRANT UPDATE(Sno),SELECT
ON TABLE Student
TO U4;

WITH RRANT OPTION;表示可以授權給其他用戶。

移除權限
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4 CASCADE;

CASCADE表示收回權限時,連帶他所往外放出的權限全部收回。

更新中….

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章