知識內容:sql
1.數據庫系統概述數據庫
2.關係數據庫的系統模型與設計理論express
3.數據庫設計方法編程
4.結構化查詢語言SQL安全
5.SqlServer數據庫系統與SqlServer系統應用及管理服務器
6.Transact-SQL語言結構及Transact-SQL程序設計數據結構
7.數據庫安全與維護數據庫設計
1、數據庫系統概述函數
1.基本概念post
- DB(數據庫):存儲數據的容器(相關數據的集合)
- DBMS(數據庫管理系統):對數據庫系統進行管理的軟件系統
- DBS(數據庫系統):DB+DBMS
- 數據模型:層次模型、網狀模型、關係模型
- 數據庫系統三級模式:模式(概念模式)、外模式(用戶模式、數據庫中的視圖)和內模式
- 數據庫系統二級映射:外模式與模式之間的映射、模式與內模式之間的映射
- 數據管理技術的四個階段:人工管理階段、文件管理階段、數據庫系統階段和高級數據庫系統階段
2.數據庫系統的特色
- 數據庫中數據是結構化的
- 數據冗餘度小,易擴充
- 較高的數據和程序獨立性
- 數據庫爲用戶提供了方便的接口
- 數據的最小存取單位是數據項
3.物理獨立性和邏輯獨立性
物理獨立性:依賴於數據的存儲結構與邏輯結構之間的關係,當數據存儲結構改變時,數據的邏輯結構不用改變,從而應用程序不用改變
邏輯獨立性:依賴於數據的整體邏輯結構與某類應用涉及的局部邏輯結構之間的關係,當整體邏輯結構改變時,局部邏輯結構能夠不變
4.概念模型
概念模型是對現實世界的抽象反映,它不依賴於具體的計算機系統,是現實世界到機器世界的一個層次
![](http://static.javashuo.com/static/loading.gif)
5.DBMS(數據庫管理系統)的功能
- 數據庫定義功能
- 數據存取功能
- 數據庫運行功能
- 數據庫的創建和維護功能
- 數據字典
2、關係數據庫的系統模型與設計理論
1.關係模型的組成部分
2. 關係的完整性
3.傳統的集合運算與專門的關係運算
集合運算:
關係運算:
4.實體之間的關係
- 一對一關係(1:1)
- 一對多關係(1:m)
- 多對多關係(m:n)
5.函數依賴
- 部分函數依賴:單主鍵狀況下不存在部分函數依賴;(A,B)->C,B->C爲部分函數依賴,例如學號和課程名能夠得出姓名,可是學號也能夠得出姓名,這是部分函數依賴
- 傳遞函數依賴:A->B,B->C,B不->A(B不屬於A)爲傳遞函數依賴,例如學號能夠得出系名,系名能夠得出系主任名,可是系名不能夠得出學號,這是傳遞函數依賴
6.範式
- 第一範式(1NF):關係中的屬性爲原子項,不可再分
- 第二範式(2NF):不存在部分依賴
- 第三範式(3NF):不存在部分依賴,不存在傳遞依賴
7.關係模式的分解
(1)保持函數依賴分解
相似如下的分解就是保持函數依賴的分解
R(A, B, C): A->B、B->C 分解爲 R1(A,B)、R2(B,C)
注:冗餘的依賴不須要保持下來!
實例:
1 例如2NF關係模式SL(Sno,Sdept,Sloc)中有下列函數依賴: 2 Sno→Sdept 3 Sdept→Sloc 4 Sno→Sloc 5 6 因爲關係模式SL存在傳遞函數依賴,會出現插入異常、數據冗餘、刪除異常等問題 7 8 關係模式SL出現上述問題的緣由是Sloc傳遞函數依賴於Sno。爲了消除該傳遞函數依賴,咱們能夠採用投影分解法(保持函數依賴分解),把SL分解爲兩個關係模式: 9 SL(Sno,Sdept,Sloc) 10 SD(Sno,Sdept) SD的碼爲Sno 11 DL(Sdept,Sloc) DL的碼爲Sdept
(2)無損分解(能夠還原)
無損分解:指將一個關係模式分解成若干個關係模式後,經過天然鏈接和投影等運算仍能還原到原來的關係模式
實例:
1 學生(學號, 姓名, 性別, 專業號, 專業名) 2 這個關係模式明顯存在問題,主鍵爲學號和專業號,可是存在部分函數依賴 3 4 解決這些問題的方法就是採起無損分解將以上的關係模式分解爲兩個關係模式: 5 學生(學號,姓名,性別,專業號) 6 專業(專業號,專業名)
3、數據庫設計方法
1.數據庫系統的設計過程
- 需求分析:數據流圖、數據字典、需求說明書
- 概念設計:E-R圖
- 邏輯設計:關係模式
- 物理設計
- 數據庫的實施
- 數據庫的運行和維護
2.命名衝突
3.概念模型向關係模型的轉換
- 一個實體類型轉化成一個關係模式 eg: 學生 -> 學生(學號,姓名,系別,專業、、、)
- 一個一對一(1:1)聯繫至少轉化成兩個關係模式
- 一個一對多(1:n)聯繫至少轉化成兩個關係模式
- 一個多對多(m:n)聯繫轉化成至少轉化成三個關係模式
4.非規範化的關係模式的問題
4、結構化查詢語言SQL
1.SQL定義索引
定義索引:
1 CREATE [UNIQUE] INDEX 索引名 ON 基表名
2 (列名1 [ASC/DESC][, 列名2 [ASC/DESC]]...)
實例:
1 CREATE UNIQUE INDEX XID_card ON Student(ID_Card DESC)
2 CREATE UNIQUE INDEX XID_card ON Student(ID_Card DESC, Sschool_number ASC)
2.select查詢語句
select語句:
1 SELECT [all|distinct|top] 列名1,列名2...
2 FROM 表名/視圖名
3 [WHERE 條件表達式]
4 [
5 GROUP BY 分組列
6 [HAVING 分組篩選條件表達式]
7 ]
8 [ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC]... ]
9 以上[]中的內容爲可選,語法中的第一行用於指定查詢結果須要返回的列: 能夠逐個列出全部列名
10 也能夠用*表示返回全部列
關於select語句中的條件表達式:條件表達式有許多種,常見的有算術運算符(+、-、*、/),邏輯運算符(AND、OR、NOT)和比較運算符(=、>、>=、<、<=、<>)
還有以下形式:
- <列名> IS [NOT] NULL:列值是否爲空
- <表達式1> [NOT] BETWEEN <表達式2> AND <表達式3>:表達式1的值是否在表達式2和表達式3之間
- <表達式> [NOT] IN (目標表列):表達式的值是不是目標表列中的一個值
- <列名> [NOT] LIKE <'字符串'>:列值是否包含在字符串中 字符串能夠用通配符(?和_表示任一字符,*和%表示任一串字符)
3.視圖的優勢
- 使用戶操做數據更靈活、方便
- 視圖對於數據庫的重構造提供了必定程度的邏輯獨立性
- 簡化了用戶觀點
- 使用戶以不一樣的方式看待同一數據
- 對機密數據提供了自動的安全保護功能
4.受權語句與撤銷受權語句
GRANT語句:受權
REVOKE語句:回收受權
1 受權語句 2 GRANT 權力1[,權力2…][ON 對象類型 對象名]TO 用戶1[,用戶2…][WITH GRANT OPTION]; 3 4 回收受權語句 5 REVOKE 權力1[,權力2…] [ON 對象類型 對象名] FROM 用戶1[,用戶2…];
實例:
1 GRAND UPDATE(學號),SELECT ON TABLE 學生 TO USER1;
2 GRAND SELECT ON TABLE 成績單 TO PUBLIC;
3 REVOKE UPDATE(學號),SELECT ON TABLE 學生 FROM USER1;
4 REVOKE SELECT ON TABLE FROM PUBLIC;
5、SqlServer數據庫系統與SqlServer系統應用及管理
1.SqlServer數據庫文件分類
- 主要數據文件(.mdf)
- 次要數據文件(.ndf)
- 日誌文件(.ldf)
- 每一個數據庫都必須有一個主要數據文件,對次要數據文件不作要求,每一個數據庫最少有一個日誌文件
2.SqlServer系統數據庫
SqlServer系統數據庫包含如下數據庫(以SqlServer2014爲例):
3.增刪改查
(1)增-INSERT語句
格式:
INSERT table_name (column_list) VALUES (expression)
實例:
1 INSERT INTO
2 users(username,password,email)
3 VALUES
4 ("wyb", "xxx", "abc@woz.cc");
(2)改-UPDATE語句
格式:
UPDATE table_name
SET column_name = expression, 、、、
WHERE search_condition
實例:
1 UPDATE
2 users
3 SET
4 email='xxx', username='xxx'
5 WHERE
6 `id`=6
(3)刪-DELETE語句
格式:
DELETE FROM table_name WHERE search_condition
實例:
1 DELETE FROM
2 users
3 WHERE
4 id=3
(4)查-SELECT語句
格式:
SELECT select_list
[INTO new_table]
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_condition]
[HAVING search_condition]
[ORDER BY order_expression [ASC|DESC]]
實例:
1 select 年齡 from 學生 order by 年齡; -- 排序數據(默認升序排列)
2 select 學號, 年齡, 專業號 from 學生 order by 年齡 desc; -- 指定降序排序數據
3 select 學號,專業號, 籍貫 from 學生 -- 檢索多個列
4 select distinct 專業號 from 學生; -- 檢索不一樣的值
5 select top 5 專業號 from 學生; -- 檢索學生表中前五行
注:
- GROUP BY用於對數據進行分組以便於彙總計算; having是group by的可選項,用於對彙總結果進行篩選。彙總計算是指通通計記錄的個數、計算某列的平均值等
- ORDER BY用於指定返回結果的記錄按某個或某幾列的大小排序,ASC->從小到大排序(默認) DESC->從大到小排序
1 GROUP BY〈組合列表〉[,〈組合列表〉…]:分組查詢。 2 查詢中的行組取決於一個或多個列的值。〈組合列表〉能夠是普通數據庫字段名,一個包含SQL字段函數的字段成一個指定查詢結果中數據庫的列位置的數值表達式,但不能是字段表達式。 3 4 HAVING 〈過濾條件〉與GROUP BY一塊兒使用指定查詢結果中的組必須知足的條件。 5 能夠根據須要設置多個過濾條件,彼此間用AND或OR鏈接。還可用NOT求反。
注意下面圖中的問題:
![](http://static.javashuo.com/static/loading.gif)
6、Transact-SQL語言結構及Transact-SQL程序設計
1.聲明變量並賦值
1 DECLARE @name char(10)
2 SET @name = 'wyb'
3 PRINT @name
2.循環結構與註釋
(1)Transact-SQL語言的循環結構 -> WHILE...CONTINUE...BREAK
語法格式:
1 語法格式:
2 WHILE<條件表達式>
3 BEGIN
4 <命令行或程序塊>
5 [BREAK]
6 [CONTINUE]
7 [命令行或程序塊]
8 END
實例:
1 顯示字符串「China」中每一個字符和其ASCII值:
2 DECLARE @position int, @string char(5)
3 SET @position = 1
4 SET @string = 'China'
5 WHILE @position <= DATALENGTH(@string)
6 BEGIN
7 SELECT SUBSTRING(@string, @position, 1) ,
8 ASCII(SUBSTRING(@string, @position, 1))
9 SET @position = @position + 1
10 END
1 求1到100的累加和,當和超過1000時中止累加,顯示累加和以及累加到的位置:
2 DECLARE @i int,@a int
3 SET @i=1
4 SET @a=0
5 WHILE @i <= 100
6 BEGIN
7 SET @a=@a+@i
8 IF @a>=1000 BREAK
9 SET @i=@i+1
10 END
11 SELECT @a AS 'a', @i AS 'i'
(2)Transact-SQL語言的註釋
Transact-SQL語言的註釋有如下兩種:
- ANSI標準的註釋符「--」用於單行註釋
- 與C語言相同的程序註釋符號,即「/*……*/」,可在程序中將多行文字標示爲註釋
3.Transact-sql數據類型
- 整數數據類型:bigint、int、smallint、tinyint
- 浮點數據類型:real、float、decimal、numeric
- 二進制數據類型:binary、varbinary、image
- 邏輯數據類型:bit
- 字符數據類型:char、nchar、varchar、nvarchar
- 文本和圖像數據類型:text、ntext、image
- 日期和時間數據類型:datetime、smalldatetime
4.索引類型
索引能夠分爲如下兩種:
- 聚簇索引,這種類型的索引順序與數據表的物理順序相同
- 非聚簇索引,這種類型的索引順序與數據表的物理順序不一樣
5.視圖與表的區別
(1)視圖的定義
數據庫中的數據都是存儲在表中的,而視圖只是一個或多個表依照某個條件組合而成的結果集,通常來講你能夠用update,insert,delete等sql語句修改表中的數據,而對視圖只能進行select操做。可是也存在可更新的視圖,對於這類視圖的update,insert和delete等操做最終會做用於與其相關的表中數據。所以表是數據庫中數據存儲的基礎,而視圖只是爲了知足某種查詢要求而創建的一個對象。
表是物理存在的,你能夠理解成計算機中的文件!視圖是虛擬的內存表,你能夠理解成Windows的快捷方式!
視圖是數據庫數據的特定子集。能夠禁止全部用戶訪問數據庫表,而要求用戶只能經過視圖操做數據,這種方法能夠保護用戶和應用程序不受某些數據庫修改的影響
(2)視圖和表的區別和聯繫
區別:
- 視圖是已經編譯好的sql語句。而表不是
- 視圖沒有實際的物理記錄。而表有
- 表是內容,視圖是窗口
- 表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表能夠及時對它進行修改,但視圖只能有建立的語句來修改
- 表是內模式,視圖是外模式
- 視圖是查看數據表的一種方法,能夠查詢數據表中某些字段構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖能夠不給用戶接觸數據表,從而不知道表結構
- 表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表
- 視圖的創建和刪除隻影響視圖自己,不影響對應的基本表
聯繫:
視圖(view)是在基本表之上創建的表,它的結構(即所定義的列)和內容(即全部數據行)都來自基本表,它依據基本表存在而存在。一個視圖能夠對應一個基本表,也能夠對應多個基本表。視圖是基本表的抽象和在邏輯意義上創建的新關係。
6.函數
經常使用函數:
![](http://static.javashuo.com/static/loading.gif)
(1)彙總數據
1 select avg(成績) as avg from 成績單 where 課程號 = 01054010; -- avg函數 2 select count(*) as num_cust from 成績單; -- count函數 3 select count(課程號) as num_cust from 成績單; -- count函數 4 select max(成績) as max_grade from 成績單; -- max函數 5 select min(成績) as min_grade from 成績單; -- min函數 6 select sum(基本工資) as sum_salary from 教師 where 職稱='教授'; --sum函數 7 select sum(基本工資) as sum_salary from 教師 where 職稱='副教授'; --sum函數 8 select sum(基本工資) as sum_salary from 教師 where 職稱='講師'; --sum函數 9 select avg(distinct 成績) as avg from 成績單 where 課程號 = 01054010; -- distinct 10 select avg(成績) as avg, max(成績) as max, min(成績) as min from 成績單 where 課程號 = 01054010; -- 組合彙集函數
(2)分組數據
1 select count(*) as num_prods from 學生 where 學號 like '0305%'; -- 數據分組 2 select 年齡, count(*) as num_prods from 學生 group by 年齡; -- 建立分組 3 select 年齡, count(*) as num_prods from 學生 group by 年齡 order by 年齡 desc; -- 建立分組並以年齡降序排列 4 select 年齡, count(*) as num_prods from 學生 group by 年齡 having count(*) >= 3; -- 過濾分組 5 select 年齡, count(*) as num_prods from 學生 where 民族 = '漢' group by 年齡 having count(*)>=3; -- having和where同時使用
group和having:
1 GROUP BY〈組合列表〉[,〈組合列表〉…]:分組查詢。 2 查詢中的行組取決於一個或多個列的值。〈組合列表〉能夠是普通數據庫字段名,一個包含SQL字段函數的字段成一個指定查詢結果中數據庫的列位置的數值表達式,但不能是字段表達式。 3 4 HAVING 〈過濾條件〉與GROUP BY一塊兒使用指定查詢結果中的組必須知足的條件。 5 能夠根據須要設置多個過濾條件,彼此間用AND或OR鏈接。還可用NOT求反。
注意下面圖中的問題:
![](http://static.javashuo.com/static/loading.gif)
7.存儲過程
存儲過程是一組已被編輯在一塊兒、存儲在服務器上、執行某種功能的預編譯SQL語句。它是一種封裝重複任務操做的方法,支持用戶提供的參數變量,具備強大的編程能力
8.事務和鎖
事務的屬性(ACID):
7、數據庫安全與維護
登陸帳號與用戶與角色的區別:
- 登陸帳號:Windows登陸帳號 or SqlServer登陸帳號,登陸帳號是系統信息
- 用戶:一個或多個登陸對象在數據庫中的映射,能夠對用戶對象進行受權,以便爲登陸對象提供對數據庫的訪問權限。用戶定義信息存放在每一個數據庫的sysusers表中
- 角色:角色表明一系列權限的集合,若是將某個角色分配給某個用戶,則這個用戶就擁有了這一系列的權限