數據庫基礎知識個人整理版強烈推薦_第1頁
數據庫基礎知識個人整理版強烈推薦_第2頁
數據庫基礎知識個人整理版強烈推薦_第3頁
數據庫基礎知識個人整理版強烈推薦_第4頁
數據庫基礎知識個人整理版強烈推薦_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一章 關系數據模型1數據模型(靜態)的三要素1一關系數據結構1二關系操作2三 關系完整性約束2四關系代數2第二章 關系數據庫的標準語言SQL4一SQL動詞表4二 數據定義4三 數據更新8四 數據查詢8五 授權15六 完整性約束命名子句17七 觸發器17第三章 關系數據庫理論18一 關系模式(回顧)18二 數據依賴18三 規范化18第一章 關系數據模型數據模型(靜態)的三要素一關系數據結構(一)基本概念包括:1 屬性(Attribute):實體所具有的某一特征。(如學生的特征是學號、姓名、-)域(Domain):屬性對應的一組具有相同數據類型的值的集合。每個屬性有一個域。(關系模型限定域必須原

2、子性 1NF)2鍵( key)(1)候選鍵(candidate key) 關系的某一屬性或屬性組的值唯一標識一個元組,而其任何真子集無此性質。候選鍵的諸屬性稱為主屬性,不包含在任何候選鍵中的屬性稱為非主屬性。(2)主鍵(primary key)一個關系至少有一個侯選鍵,可以有幾個侯選鍵。一般從侯選鍵中選擇一個作為主鍵(primary key),其他的稱為侯補鍵(alternate key) 每個主鍵的值是不能相同的,(3)外鍵(foreign key)如關系中的屬性或屬性組不是本關系的主鍵,而引用其他關系或本關系的主鍵,則稱為本關系的外鍵。3 關系(Relation):(1)關系:定義在事物的

3、所有屬性域上的多元關系 ,一個關系就是一張二維表。 (2)關系模式:關系的描述稱為關系模式,它可以形式化的表示為R(U,D,DOM,F)R 為關系名U為組成該關系的屬性名集合D為屬性組U中屬性所來自的域DOM為屬性向域的映像集合F為屬性間數據的依賴關系集合關系模式通常簡記為:R(U)或R(A1,A2,A3,An)關系的三種基本類型基本表:是實際存在的表,它是實際存儲數據的邏輯表示。查詢表:是查詢結果對應的表。視圖表:是由基本表或其他視圖導出的表,是虛表,不對應實際存儲內容。二關系操作(一)兩種關系操作1 查詢(Query)查詢可以分為 選擇(SELECT),投影(Project),連接(Joi

4、n),交(Intersection),并(Union),差(Except),除(Divide),笛卡爾乘積。其中選擇,投影,并,差,笛卡爾乘積是5種基本操作,其他的操作可用這些基本操作定義和導出2 插入(Insert),刪除(Delete),修改(Update)(二)關系操作的特點集合式的操作方式,即操作的對象和結果都是集合。(三)關系數據語言可以分為三類1 關系代數語言2 關系演算語言(元組關系演算和域關系演算)3具有關系代數和關系演算雙重特點的語言(SQL語言)三 關系完整性約束關系數據庫的數據必須遵循的約束實體完整性(Entity Integrity ) 參照完整性(Referentia

5、l Integrity ) 用戶自定義完整性(User-Defined Integrity )實體完整性和參照完整性是關系模型必須滿足的完整性約束條件,被稱為關系的兩個不變性。 (一)實體完整性實體完整性規則:關系模式R的主屬性值不可為空 指所有主屬性均不可取空值,不僅僅是主鍵不可為空 (二)參照完整性1外鍵(Foreign Key)定義:設F是基本關系R的一個或一組屬性,但不是關系的碼,是基本關系的主碼。如果與相對應,則稱是的外碼(Foreign Key)R稱為參照關系(Referential Relation),S稱為被參照關系(Referenced Relation )2參照完整性規則若

6、屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼KS相對應(基本關系到R和S不一定是不同關系),則對于R中每個元組在F上的值必須為:(1)等于被參照關系S 中所參照的候選鍵的某個值(2)空值(三)用戶自定義完整性針對某一具體數據的約束條件,反映某一具體應用所涉及的數據必須滿足的特殊語義由應用環境決定四 關系代數關系代數按運算符的不同可分為傳統關系運算和專門關系運算(一)傳統關系運算(交,并,差,笛卡爾乘積)1 (并)R1R2=b 2 d b 3 b c 2 d d 3 b a 3 c e 5 f g 6 62 (交 AND) R1R2= b 2 d c 2 d3 (差) R1R2=

7、b 3 b d 3 b4 (笛卡爾乘積) R1 S = b 2 d 2 d b 2 d 3 b b 3 b 2 d b 3 b 3 b c 2 d 2 d c 2 d 3 b d 3 b 2 d d 3 b 3 b(二)專門關系運算1 選擇(SELECT) (選擇符合條件的元組) <選擇條件>(<關系名>) 如: 性別=男(STUDENT) 表的水平劃分2 投影(Project)(選擇符合條件的屬性) <屬性表> (<關系名>) 如: 學號,姓名 (STUDENT) 表的垂直劃分3 連接操作(Join) 笛卡爾乘積 R S = <t,g&g

8、t;|tR AND gS(1)連接分為等值連接和自然連接AB 連接操作: R|S 其中A和B分別為R和S上度數相等且具有可比性的屬性組1)等值連接(為=) R1.A1 R1.A2R1.A3 S.A2 S.A3 如上例 R1 | S = b 2 d 2 d R1.A2=S.A2 b 3 b 3 b c 2 d 2 d d 3 b 3 b 2)自然連接(只有|)一般連接是從行的角度出發的,但自然連接還要取消重復的列,是從行和列的角度進行運算 S.A2 S.A3R1.A1 R1.A2R1.A3 如 R1 | S = b 2 dB 3 b4 除運算(÷) R1.A1 如R1÷S =

9、 b 在R1上b印象集合是(2,d),(3,d) S在(A1,A2)上的投影為(2,d),(3,d)第二章 關系數據庫的標準語言SQL一SQL動詞表SQL功能動詞數據查詢SELECT數據定義CREATE,DROP,ALTER數據操縱INSERT,UPDATE,DELETE數據控制GRANT,REVOKE二 數據定義操作對象操作方式創建刪除修改模式CREATE SCHEMADROP SCHEMA表CREATE TABLEDROP TABLEALTER TABLE視圖CREATE VIEWDROP VIEW索引CREATE INDEXDROP INDEX注意SQL通常不提供修改模式定義,修改視圖定

10、義,修改索引定義的操作(一)模式的定義和刪除1模式的定義 CREATE SCHEMA <模式名>AUTORIZATION<用戶> 例如:CREATE SCHEMA “s-t” AUTORIZATION wang;(1) 要創建模式,調用該命令的用戶必須具有DBA權限,或者獲得了DBA授予的CREATE SCHEMA權限(2)如果沒指定<模式名>那么<模式名>隱含為<用戶名>(3)定義模式,實際上是定義了一個命名空間,在這個空間中可以進一步定義該模式包含的數據庫對象,例如基本表,視圖,索引。2模式的刪除 DROP SCHEMA<模

11、式名><CASCADE | RESTRICT> (兩者必選其一) 例如:DROP SCHEMA “s-t” CASCADE;(1)CASCADE(級聯)表示在刪除模式的同時把該模式中所有的數據庫對象全部一起刪除。(2)RESTRICT(限制)表示在刪除該模式中已經定義了下屬數據庫對象(表,視圖索引),則拒絕該刪除語句。(二)表的定義,刪除和修改1表的定義CREATE TEBLA<表名> (<列名> <數據類型> 列級完整性約束,<列名> <數據類型> 列級完整性約束 ,<表級完整性約束>)列定義的完整格式

12、:<列名> <列類型> DEFAULT <默認值> NOT NULL <列約束>CREATE TEBLA<表名> AS <SELECT 查詢> 若要定義模式式下的表:CREATE TABLE <模式名>.<表名> (1)數據類型  ANSI/ISOOracle字符型Char(n)Char(n)Character(n)Character Varying(n)Varchar2(n)Char Varying(n)數值型NumericNumberDecimalIntegerIntFloatDoub

13、leReal日期型DateDateTime(2)完整性約束主鍵約束(Primary Key) 實體完整性外鍵約束(Foreign Key) 參照完整性檢查約束(Check) 用戶自定義完整性唯一鍵約束(Unique)非空約束(Null | Not Null)默認值(Defautl)(3)例子 CREATE TABLE student (Sno CHAR(8) PRIMARY KEY,Sname CHAR(20) UNIQUE,Ssex CHAR(2) DEFALULT 男, Sage SMALLINT CHECK(Sage>0)Sdept CHAR(20)CREATE TABLE Cou

14、rse (Cno CHAR(4) PRIMARY KEY,Cname CHAR(40),Cpno CHAR(4) REFERENCES Course(Cno),Ccredit SMALLINT,CHECK (Ccredit >0)CREATE TABLE sc(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY (Sno,Cno),/注意一定要有括號FOREIGN KEY(Sno) REFERENCES Course(Cno),/sno一定要有括號)(4)說明 1)列約束:在每個列后定義,可以有多個約束子句,不能定義多個列上的約束2)表約

15、束:在全部列定義完成后定義,可以有多個約束子句,多個列上的約束必須使用表約束,單列上的約束可以用列約束,也可用表約束2表的刪除 DROP TABLE <表名>CASCADE | RESTRICT(1)CASCADE(級聯)刪除該表沒有任何限制,刪除表的同時,相關的依賴對象(如視圖)也一起刪除。(2)RESTRICT(限制)刪除該表是有限制條件的。欲刪除的表不能被其他表的約束所引用 (如CHECK,FOREIGN KEY等約束),不能有視圖,不能有觸發器(trigger),不能存儲過程或函數。(3)缺省情況下是RESTRICT3 表的修改 ALTER TABLE <表名>

16、 ADD <列名><數據類型>完整性約束 | MODIFY <列名><數據類型>完整性約束 | DROP COLUMN <列名> | ADD<表約束> | DROP CONSTRAINT <約束名> 例如(1)ALTER TABLE StudentADD Dept Varchar2(10)UNIQUE(2)Alter Table StudentDROP COLUMN age(3)AlLTER TABLE StudentMODIFYage number(3) NOT NULL(4)ALTER TABLE Stud

17、entADD CONSTRAINT PK_Student PRIMARY KEY(S#)(5)ALTER TABLE SC DROP CONSTRAINT FK_SC(三)視圖的定義和刪除1視圖的定義 CREATE VIEW <視圖名>(列名1,列名2,)/列名一定要放在括號里 AS <查詢> WITH CHECK OPTION |WITH READ ONLY例如:CREATE VIEW cs_view (sno, name, age)AS SELECT s#, sname, ageFROM student WHERE Dept = 計算機系 WITH READ ONL

18、Y;(1)WITH CHECK OPTION表示對視圖進行UPTATE,INSERT,DELETE操作時要保證更新,插入,刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式) WITH READ ONLY表示視圖是只讀的(2)視圖的屬性列名只能是全部缺省或全部指定,沒有別的選擇。但在下列兩種情況下必須明確指定組成視圖的列名。 1)某個目標列不是單純的屬性名,而是聚集函數或列表達式。 2)多表連接時選出幾個同名列作為視圖的字段。(3)子查詢可以是任意的SELECT子句,但通常不允許含有OREER BY 子句各DISDINCT短語。(4)不是所有視圖都是可更新的1)基于聯接查詢的視圖不可更新

19、2)使用了函數的視圖不可更新3)使用了分組操作的視圖不可更新4)只有建立在單個表上而且沒有使用函數的視圖才是可更新的2 視圖的刪除 DROP VIEW <視圖名> CASCADE(四)索引的定義和刪除1索引的定義CREATE UNIQUE | CLUSTER INDEX <索引名> ON <表名> (<列名> <次序> ,<列名> <次序> )例如:CREATE UNIQUE INDEX SCno on SC(Sno ASC,Cno DESC);(1)UNIQUE表明此索引的每一個索引值只對應唯一的數據記錄(2

20、)CLUSTER表示要建立的索引是聚簇索引。聚簇索引是指索引項的順序與表中的物理順序一致的索引組織,在一個表上只能建立一個聚簇索引。(3)次序可選ASC(升序)或DESC(降序)缺省值為ASC2索引的刪除DROP INDEX <索引名> DROP INDEX SCno;三 數據更新(一)插入數據INSERT插入數據通常有兩種形式,一種是插入一個元組,另一種是插入子查詢結果。后者可以一次插入多個元組。1 插入一個元組INSERT INTO <表名> ( < 屬性列1 >,< 屬性列2 >)VALUES(< 常量1 > ,< 常量2

21、 >) 例如 INSERT INTO Student (Sno, Sname, Ssex, Sdept, Sage)VALUES (20081512, 陳冬 , 男 , IS , 18);INTO 語句中沒有出現的屬性列,新元組在這些列上將取空值或默認值。在INTO子句中只指出了表名,沒有指出屬性名,新元組要在所有屬性列上都指定值,屬性列的次序與CREATE TABLE 中的次序相同。2 插入子查詢結果INSERT INTO <表名> ( < 屬性列1 >,< 屬性列2 >)子查詢;例如INSERT INTO Dept_age( Sdept ,Avg_

22、age)SELECT Sdept ,AVG(Sage)FROM StudentGROUP BY Sdept;(二)修改數據 UPDATE <表名> SET <列名>=<表達式>,<列名>=<表達式> WHERE <條件>例如:UPDATE Student SET Sage=22 WHERE Sno=200215021;(三)刪除數據DELETE FROM<表名>WHERE <條件>例如:DELETE FROM Student WHERE Sno=20021528;DELETE語句刪除的是表中的數據,

23、而不是關于表的定義。四 數據查詢基本數據查詢的格式:SELECT ALL | DISTINCT < 目標列表達式 >AS< 別名>,<標列表達式>AS<別名>FROM <名或視圖名>,<表名或視圖名>WHERE<查詢表達式>GROUP BY <列名1>HAVING<條件表達式>ORDER BY <列名2>ASC|DESC; (一)單表查詢在一個表中查詢數據 1* 查詢查詢全部記錄:查詢全部的學生信息SELECT * FROM Student;*表示所有列等同于SELECT s

24、#, sname, age, sex FROM Student2使用別名(AS或空格) 使用別名:查詢所有學生的學號和姓名SELECT s# AS 學號, sname AS 姓名 FROM Student如果別名包含空格,須使用雙引號SELECT s# AS “Student Number” FROM Student3表達式查詢(三種表達式,字符串表達式,算術表達式,函數表達式)(1)字符串表達式查詢所有學生的學號、姓名和出生年份,返回兩列信息,其中一列是“學號:姓名”,另一列是出生年份SELECT s# | “:”| sname AS 學生,2003age AS 出生年份 FROM Stud

25、ent說明連接字符串 | 表示則多個查詢列連接為一個列輸出。(2)算術表達式查詢學生的出生年份SELECT 2003age AS 出生年份 FROM Student;(3)函數表達式SELECT sno, to_char(birth, mm-dd-yyyy) AS birthday FROM StudentSELECT Count(sno) As 學生人數 FROM Student4條件查詢(1)WHERE條件注:1)在where子句中使用列名和表達式,但不能使用別名。2)在where子句中使用數值時,既可以用單引號也可以不用單引號,使用日期值字符值時,都必須使用單引號,并且日期值的格式必須要

26、符合數據庫中支持的日期格式,否則必須事先使用to_date函數將其轉換成為數據庫中支持的日期格式。oracle 中日期的默認格式為: 01-1月-82在輸入查詢條件時,可以用to_date(1998-01-01,yyyy-mm-dd) 3)在SQL語句中,命令不區分大小寫,但字符串區分大小寫WHERE子句中的關系運算符:比較操作符:>, <, >=, <=, =, <>邏輯操作符:AND OR NO其他操作符:INBETWEEN ANDIS NULL和IS NOT NULLLIKEEXISTS 例如: 1)IN:查詢s001,s003,s006和s008四學

27、生的信息SELECT * FROM StudentWHERE s# IN (s001,s003,s006,s008)2)IS NOT NULL:查詢缺少年齡數據的學生SELECT * FROM Student WHERE age IS NULLLIKE:查詢姓名的第一個字母為R的學生SELECT * FROM Student WHERE sname LIKE R%:任意長度的字符串_:單個字符(一個漢字占兩個字節)注意:LIKE只能用于字符串的匹配,不能用于其他類型。查詢姓名的第一個字母為R并且倒數第二個字母為S的學生SELECT * FROM Student WHERE sname LIKE

28、 R%S_多個比較式可用NOT、AND和OR連接SELECT * FROM Student WHERE age IS NULL and sname LIKE R%3)若要查詢通配符可以用轉義字符 escape character 通常 character 用 (2)去除重復記錄(DISTINCT)查詢學生的姓名SELECT Distinct sname FROM StudentDISTINCTt只對記錄有效,不針對某個特定列SELECT Distinct sname, age FROM Student(3)排序查詢(ORDER BY)注:1)order by只能對最終查詢結果進行排序,也就是說

29、其只能放在查詢語句的最后一條。2)可以使用列的別名,列的位置進行排序。3)在大多數情況下,指定的排序列(order by 列名)都是選擇列(select 列名),但排序 列也可以不是選擇列。但如果在select 語句中使用了distinct關鍵字,則排序列必須 是選擇列了。查詢所有學生信息并將結果按年齡升序排列SELECT * FROM Student ORDER By age將結果按年齡升序排列,按姓名降序排列SELECT * FROM StudentORDER By age ASC,sname DESCASC表示升序,DESC表示降序(4)聚集函數 注: 1)聚集函數和group by 子

30、句聯合使用,表示對每個組進行統計,否則將所有數據行當 成一個組進行統計。 2)聚集函數只能出現在選擇列表、order by子句、having子句中,而不能出現在where 和group by 子句中。 3)除了count(*)外,其他聚集函數都會忽略null行。 4)聚集函數中可以指定all和distinct選項。其中all是默認選項,表示統計所有的行(包 括重復行),而distinct只統計不同的行。count(distinct sal) <FuctionName>(DISTINCT | ALL<列名>) COUNT(列名):對一列中的值計數COUNT(*):計算記錄

31、個數SUM(列名):求一列值的總和(數值)AVG (列名):求一列值的平均值MIN (列名):求一列值的最小值MAX (列名):求一列值的最大值例子:求學生的總人數SELECT count(*) FROM student求選修了課程的學生人數SELECT COUNT(DISTINCT s#) FROM SC求學生的平均年齡SELECT avg(age) as average_age FROM student(5)分組查詢(GROUP BY) 1)基本格式 group by 列名1,列名2 having 條件 ORDER by 列名 查詢男生和女生的平均年齡SELECT sex, AVG(age

32、) as Average_age FROM StudentGroup By sex注意:除聚集函數外的屬性必須全部出現在Group By子句中 2)返回特定的分組結果(HAVEING)查詢不同年齡的學生人數,并返回人數在5人以上的結果SELECT age, COUNT(*) as students FROM StudentGroup By ageHaving COUNT(*) > 5Having子句中必須聚集函數的比較式,而且聚集函數的比較式也只能通過Having子句給出Having中的聚集函數可與SELECT中的不同查詢人數在60以上的各個班級的學生平均年齡SELECT class,

33、AVG(age) FROM StudentGroup By classHaving COUNT(*) > 60(6)使用rollup和cube限定詞 Rollup 用于生成橫向統計結果 SQL> select deptno,job,avg(sal),max(sal) from emp 2 group by rollup(deptno,job); DEPTNO JOB AVG(SAL) MAX(SAL)- - - - 10 CLERK 1300 1300 10 MANAGER 2450 2450 10 PRESIDENT 5000 5000 10 2916.66667 5000 20

34、 CLERK 950 1100 20 ANALYST 3000 3000 20 MANAGER 2975 2975 20 2175 3000 30 CLERK 950 950 30 MANAGER 2850 2850 30 SALESMAN 1400 1600 30 1566.66667 2850 2073.21429 5000 Cube 用于生成縱向統計結果 SQL> select deptno,job,avg(sal),max(sal) from emp 2 group by cube (deptno,job); DEPTNO JOB AVG(SAL) MAX(SAL)- - - -

35、 2073.21429 5000 CLERK 1037.5 1300 ANALYST 3000 3000 MANAGER 2758.33333 2975 SALESMAN 1400 1600 PRESIDENT 5000 5000 10 2916.66667 5000 10 CLERK 1300 1300 10 MANAGER 2450 2450 10 PRESIDENT 5000 5000 20 2175 3000 20 CLERK 950 1100 20 ANALYST 3000 3000 20 MANAGER 2975 2975 30 1566.66667 2850 30 CLERK 9

36、50 950 30 MANAGER 2850 2850 30 SALESMAN 1400 1600(二)連接查詢一個查詢同時涉及兩個以上的表,則稱之為連接查詢。SELECT < 表名.列名>,<表名.列名>FROM <表名>,<表名>WHERE<查詢表達式>1 等值連接和非等值連接注:在連接查詢中應在列前加上表作為前綴,但如果列名在不同的表中不同,則可以不加表名限制,否則必須加。當指定表的別名時,別名應跟在表名后面。例如:SQL> select d.deptno , d.dname, e.ename, e.sal 2 from

37、dept d,emp e 3 where d.deptno=e.deptno 4 and d.deptno=20;1)等值連接查詢學生的學號,姓名和所選課程號SELECT student.s#, student.sname,sc.c#FROM student,scWHERE student.s# = sc.s# 聯接條件2)非等值連接 SELECT SC.S# , Course.credit FROM SC,Course WHERE SC.C# I IN Course.C#2自然連接 若在等值連接中把目標列中重復的屬性列去掉則為自然連接3自身連接 給一個表定義兩個或多個不同的別名,就可以像使用

38、這兩個別名進行連接查詢。 SELECT FIRST.Cno, SECOND.Cpno FROM Course FIRST , Course SECOND WHERE FIRST.Cpno=SECOND.Cno4外連接查詢 外連接分為左外連接和右外連接 左外連接列出左邊關系中所有的元組 右外連接列出右邊關系中所有的元組SELECT < 表名.列名>,<表名.列名>FROM <表名>LEFT|RIGHT OUT JOIN USING<表名> ON (連接條件)USING去掉重復行5復合條件查詢 WHERE子句中可以有多個連接條件,稱為復合條件連接。(

39、三)嵌套查詢在SQL語言中,一個SELECT-FROM-WHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢。1 無關子查詢父查詢與子查詢相互獨立,子查詢語句不依賴父查詢中返回的任何記錄,可以獨立執行查詢沒有選修課程的所有學生的學號和姓名SELECT s#,snameFROM studentWHERE s# NOT IN ( SELECT distinct s# FROM sc)子查詢返回選修了課程的學生學號集合,它與外層的查詢無依賴關系,可以單獨執行無關子查詢一般與IN一起使用,用于返回一個值列表2 相關子查詢相關子查詢的結

40、果依賴于父查詢的返回值查詢選修了課程的學生學號和姓名SELECT s#, snameFROM studentWHERE EXISTS (SELECT * FROM sc WHERE sc.s# = student.s#)相關子查詢不可單獨執行,依賴于外層查詢EXISTS(子查詢):當子查詢返回結果非空時為真,否則為假執行分析:對于student的每一行,根據該行的s#去sc中查找有無匹配記錄3 連接視圖子查詢出現在FROM子句中作為表使用查詢只選修了1門或2門課程的學生學號、姓名和課程數SELECT s#, count_c#FROM (SELECT s.s# as s#, count(sc.s

41、#) as count_c# FROM student s, sc WHERE s.s#=sc.s# Group by s.s#) SC2, studentWHERE sc2.s# = student.s# and (count_c#=1 OR count_c#=2)聯機視圖可以和其它表一樣使用(四)查詢結果的連接Union和Union AllMinusIntersect1 Union和Union All查詢課程平均成績在90分以上或者年齡小于20的學生學號(SELECT s# FROM student WHERE age<20)UNION(SELECT s# FROM (SELECT

42、s#, AVG(score) FROM SC group by s# having avg(score)>90) SC2)UNION操作自動去除重復記錄UNION All操作不去除重復記錄2 Minus查詢未選修課程的學生學號(SELECT s# FROM Student)Minus(SELECT distinct s# FROM SC)3 Intersect返回兩個查詢結果的交集查詢課程平均成績在90分以上并且年齡小于20的學生學號(SELECT s# FROM student WHERE age<20)Intersect(SELECT s# FROM (SELECT s#, A

43、VG(score) FROM SC group by s# having avg(score)>90) SC2)五 授權 (一)創建數據庫模式的權限CREATE USER <用戶名> WITH DBA | RESOURCE | CONNECT1 對數據庫模式的授權由DBA在創建用戶時實現2 新創建的用戶有三種權限擁有的權限可否執行的操作CREATE USERCREATE SCHEMACREATE TABLE登錄數據庫執行查詢和操作DBA可以可以可以可以RESOURCE不可以不可以可以可以CONNECT不可以不可以不可以可以但必須擁有相應權限(二)授權和回收關系數據庫系統中的存

44、取權限對象類型對象操作類型(權限)數據庫模式CREATE SCHEMA基本表CREATE TABEL ,ALTER TEBLE模式視圖CREATE VIEW索引CREATE INDEX數據基本表和視圖SELECT,INSERT,UPDATE,DELETE,REFERENCES,ALL PRIVILEGES數據屬性列SELECT,INSERT,UPDATE,DELETE,REFERENCES,ALL PRIVILEGES1 授權GRANT <權限> ,<權限>ON <對象類型> <對象名> ,<對象名> <對象名>TO &l

45、t;用戶> ,<用戶>WITH GRANT OPTION ; 例如:GRANT SELECT ON TABLE StudentTO U1 WITH GRANT OPTION(1)WITH GRANT OPTION表示獲得某種權限后的用戶,還可以把這種權限授予其他用戶。如果沒有此句,則不能傳播該權限(2)用戶可以是PUBLIC即全體用戶2 回收REVOKE <權限> , <權限>ON <對象類型> <對象名>,<對象名><對象名>FROM <用戶> , <用戶> CASCADE |

46、RESTRICT;例如:REVOKE SELECT ON TABLE Student FROM U1 CASCADE;(三)數據庫角色1 創建角色CREATE ROLE <角色名>例如:CREATE ROLE R1;數據庫角色是被命名的一組與數據庫操作相關的權限,角色是權限集合2 給角色授權 GRANT <權限> ,<權限> ON <對象類型> <對象名> ,<對象名> <對象名> TO <角色> ,<角色>; 例如:GRANT SELECT,UPDATE,INSERT ON TABLE

47、 Student TO R1;3 將一個角色授予其他角色或用戶GRANT <角色1> ,<角色2>TO <角色> ,<用戶> WITH ADMIN OPTIONWITH ADMIN OPTION 表示獲得某權限的角色或用戶還可以把這種權限再授予其他角色或用戶例如:GRANT R1 TO wang;4 角色權限回收REVOKE <權限> , <權限>ON <對象類型> <對象名>,<對象名><對象名>FROM <角色> , <角色>例如:REVOKE R

48、1 FROM wang;六 完整性約束命名子句完整性約束條件可以在CREATE TABLE語句中定義。SQL還在CREATE TABLE語句中提供了完整性約束命名子句CONSTRAINT,用來對完整性約束條件命名。1 創建完整性約束CONSTRAINT<完整性約束條件名>PRIMARY KEY 短語 | FOREIGN KEY短語| CHECK短語例如:CREATE TEBLE Student (Sno NUMERIC(6)CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 999999)Sname CHAR(20) CONSTRAINT C2 NO

49、T NULL, Sage NUMERIC(3)CONSTRAINT C3 CHECK(Sage<30), Ssex CHAR(2)CONSTRAINT C4 CHECK (Ssex IN(男 , 女), CONSTRAINT StudentKey PRIMARY KEY (Sno));2 修改完整性約束 例如:ALTER TABLE Student DROP CONSTRAINT C4;ALTER TABLE StudentADD CONSTRAINT C5 CHECK (Sage<40);七 觸發器CREATE TRIGGER<觸發器名>BEFORE | AFTER

50、<觸發事件>ON<表名> FOR EACH ROW| STATEMENTWHEN<觸發條件><觸發動作體>第三章 關系數據庫理論一 關系模式(回顧)一個關系模式應當是一個五元組。 R(U,D,DOM,F)R 為關系名U為組成該關系的屬性名集合D為屬性組U中屬性所來自的域DOM為屬性向域的映像集合F為屬性間數據的依賴關系集合由于D和DOM對模式設計關系不大,因此我們在本章中把關系模式看作是一個三元組:R<U,F> 當且僅當U上的一個關系r滿足F時,稱r為關系模式R<U,F>的一個關系。 二 數據依賴數據依賴是一個關系內部屬性與屬性之間的一種約束關系。這種關系是通過學習屬性間值的相等與否體現出來的數據間相關聯系。最重要的數據依賴

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論