卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

北大青鳥S2sql數(shù)據(jù)庫設計和高級查詢總結(jié)

第一章 數(shù)據(jù)庫的設計良好的數(shù)據(jù)庫設計1、節(jié)省數(shù)據(jù)庫的存儲空間2、能夠保證數(shù)據(jù)的完整性3、方便進行數(shù)據(jù)庫應用系統(tǒng)的開發(fā)糟糕的數(shù)據(jù)庫設計1、效率低下2、更新和檢索數(shù)據(jù)時會出現(xiàn)許多問題設計數(shù)據(jù)庫的步驟1、需

第一章 數(shù)據(jù)庫的設計

良好的數(shù)據(jù)庫設計

1、節(jié)省數(shù)據(jù)庫的存儲空間

2、能夠保證數(shù)據(jù)的完整性

3、方便進行數(shù)據(jù)庫應用系統(tǒng)的開發(fā)

糟糕的數(shù)據(jù)庫設計

1、效率低下

2、更新和檢索數(shù)據(jù)時會出現(xiàn)許多問題

設計數(shù)據(jù)庫的步驟

1、需求分析階段 分析客戶的業(yè)務和數(shù)據(jù)處理需求

⑴ 收集信息

⑵ 標識對象(實體)

⑶ 標識每個對象需要存儲的詳細信息

⑷ 標識對象之間的關(guān)系

2、概要設計階段 繪制數(shù)據(jù)庫的E-R 模型圖(實體關(guān)系圖)

3、詳細設計階段 將E-R 圖轉(zhuǎn)換為多張表, 進行邏輯設計, 并應用數(shù)據(jù)庫設計的三大規(guī)范進行設計

4、代碼編寫階段

映射基數(shù)

1一對一

2一對多

3多對一

4多對多

實體關(guān)系圖

矩形表示實體集

橢圓形表示屬性

菱形表示關(guān)系集

直線用來連接

設計數(shù)據(jù)庫問題

1 信息重復

2 更新異常

3 插入異常(無法表示某些信息)

4 刪除異常(丟失有用的信息)

數(shù)據(jù)庫設計的三大規(guī)范理論

一 第一范式的目標是確保 每列的原子性

二 第二范式的目標是確保 表中的每列都和主鍵相關(guān)

三 第三范式的目標是確保 每列都和主鍵直接相關(guān), 而不是間接相關(guān)(不能傳遞依賴)

,

規(guī)范化和性能的關(guān)系

在必要的情況下 允許適當?shù)臄?shù)據(jù)冗余

第二章 數(shù)據(jù)庫的實現(xiàn)

一 建庫

ues master

go

if exists (select * from sysdatabases where name ='數(shù)據(jù)庫名字')

drop database 數(shù)據(jù)庫名 --判斷這個數(shù)據(jù)庫名字是否存在, 如果存在 刪除 create database 數(shù)據(jù)庫名

on [primary]

(

name='',

filename='',

size ='', 建立數(shù)據(jù)庫的主文件 如果需要建立次要文件(ndf) 用逗號隔開 maxsize ='',

filegrowth =''

)

log on

(

name ='',

filename='',

size ='', 建立日志文件 如果建立多個日志文件 在后面用逗號隔開 maxsize ='',

filegrowth =''

)

go -- 批處理

二 建表

ues 數(shù)據(jù)庫名字

go

if exists (select * from sysobjects where name ='表名')

drop table 表名 --判斷是否有這個名字的表

create table 表名

(

字段名 數(shù)據(jù)類型 列的特征

如 stuid int identity(1,1) not null --identity 表示是否為自動增長

)

go

,

三 加約束

1 主鍵約束(primary key constraint) --constraint 約束

alter table 表名

add constraint 約束名(PK_***) primary key(約束的字段)

2 唯一約束(unique constraint)

alter table 表名

add constraint 約束名(uq_***) unique(約束的字段)

3 檢查約束(check constraint)

alter table 表名

add constraint 約束名(ck_***) check(約束的條件)

4 默認約束(default constraint)

alter table 表名

add constraint 約束名(df_***) default('默認值') for 約束的字段

5 外建約束(foreign key constraint)

alter table 表名

add constraint 約束名(fk_***) foreign key(約束的字段) references 主表的表名(主表的字段)

總結(jié)

create database 建庫

create table 建表

add constraint 加約束

drop database 刪庫

drop table 刪表

drop constraint 刪約束

use master select * from sysdatabases 判斷是否有庫名

select * from sysobjects 判斷是否有表名

完整性

1 實體完整性(保證數(shù)據(jù)是唯一的如主鍵唯一鍵標示列)

2 引用完整性(保證兩表數(shù)據(jù)一致如外鍵)

3 域完整性(保證數(shù)據(jù)的準確性如檢查約束默認約束非空)

三層安全模型

1 登陸帳號-- 決定登陸服務

windows 身份驗證

exec sp_grantlogin 'windows域名域帳戶'

sql 身份驗證

exec sp_addlogin '帳戶名',' 密碼'

2 數(shù)據(jù)庫用戶--訪問數(shù)據(jù)庫

use 數(shù)據(jù)庫名

go

exec sp_grantdbaccess '登陸帳戶',('數(shù)據(jù)庫用戶') 如果不寫數(shù)據(jù)庫用戶默認為登陸帳號名 3 權(quán)限 --在數(shù)據(jù)庫里的操作

,

use 數(shù)據(jù)庫名

go

grant 權(quán)限(增, 刪, 改, 查, 建表(create table)) on 表名 to 用戶名

第三章 T-SQL 編成

使用變量

一局部變量

declare @變量名 類型

賦值: 1、 set @變量名 = 值

2、 select @變量名 =值

二全局變量

@@error 最后一個T-SQL 錯誤的錯誤號

@@identity 最后一次插入的標示值

@@language 當前使用的語言的名稱

@@max_connections 可以創(chuàng)建的同時連接的最大數(shù)目 @@rowcount 受上一個sql 語句影響的行數(shù)

@@servername 本地服務器的名稱

@@servicename 該計算機上的sql 服務的名稱 @@timeticks 當前計算機上每刻度的微秒數(shù) @@transcount 當前連接打開的事物數(shù) @@version sql server 的版本信息

輸出語句

1、print 局部變量或字符串

2、select 局部變量 as 自定義列名(查詢語句的特殊應用)

邏輯控制語句

1、

if(條件)

begin -- 開頭

語句

end --結(jié)束

else --為可選

begin -- 開頭

語句

end --結(jié)束

2、

while (條件)

語句

[break]

,

3、

case

when 條件1 then 結(jié)果1

when 條件2 then 結(jié)果2

[else 其他結(jié)果]

end

批處理語句

以一條命令的方式來處理一組命令的過程稱為批處理

批處理的好處就是能夠簡化數(shù)據(jù)庫的管理

第四章 高級查詢

一 簡單子查詢

select *** from 表1 where 字段1 >(子查詢) 它等于一個等值內(nèi)連接

將子查詢和比較運算符聯(lián)合使用,必須保證子查詢返回的值不能多與一個

二 in 和 not in 子查詢

in 后面的子查詢可以返回多條記錄

select *** from 表1 where 字段1 in(not in)(子查詢)

三 exists not exists子查詢

if exists (子查詢)

語句

如果子查詢的結(jié)果非空,則exists(子查詢) 將返回真(true) ,否則返回假(false)

第五章 事務、索引和試圖

一 事務:是一個整體,要么都成功,要么都失敗

事務時作為單個邏輯工作單元執(zhí)行的一系列操作。一個邏輯工作單元必須有4個屬性 1 原子性(atomicity)

事務是一個完整的操作。事務的各元素是不可分得

2 一致性(consistency)

當事務完成時,數(shù)據(jù)必須處于一致狀態(tài)

3 隔離性(isolation)

對數(shù)據(jù)進行修改的所有并發(fā)事務是彼此隔離的,這表明事務必須是獨立的, 它不應以任何方式依賴于或影響其它事務

4 持久性(durability)

事務完成之后,它對系統(tǒng)的影響是永久的

簡稱 ACID

,

二 如何創(chuàng)建事務

開始事務:begin transaction

提交事務:commit transaction

回滾(撤銷) 事務: rollback transaction

事務的分類有3種

1 顯示事務: 用 begin transaction 明確指定事務的開始

2 隱式事務: 通過設置 set implicit_transaction on 語句, 將隱式事務模式設置為打開

3 自動提交事務: 這是sql server 的默認模式 它將每條單獨的T-SQL 語句視為一個事務. 如果成功執(zhí)行, 則自動提交. 如果錯誤, 則自動回滾.

在這里用的了全局變量@@error

declare @errorsum int

set @errorsum =0

語 句

set @errorsum =@errorsum @@error

三 什么是索引

索引, 它是sql server編排數(shù)據(jù)的內(nèi)部方法, 相當于字典中的目錄

索引頁, 數(shù)據(jù)庫中存儲索引的數(shù)據(jù)頁

通過索引可以大大提高數(shù)據(jù)庫的檢索速度, 改善數(shù)據(jù)庫性能

加快查詢的速度(通過平衡二叉樹)

增刪改 速度慢, 所需要的空間大

索引可分為3類

1 唯一索引: 唯一索引不允許兩行具有相同的索引值.

創(chuàng)建了唯一約束, 將自動創(chuàng)建唯一索引, 為了最佳性能, 建議使用主鍵的約束

2 主鍵索引: 在數(shù)據(jù)庫關(guān)系圖中為表定義一個主鍵將自動創(chuàng)建主鍵索引, 主鍵索引是唯一索引的特殊類型.

3 聚集索引: 在聚集索引中, 表中各行的物理順序與健值的邏輯(索引) 順序相同.

非聚集索引: 表中各行的物理順序與鍵值的邏輯順序不匹配.

在sql server 中, 一個表只能 創(chuàng)建一個聚集索引, 但可以有多個非聚集索引, 設置某列為主鍵, 該列就默認為聚集索引

四 建立索引

create [unique][clustered][nonclustered] index ix_(name)

on 表名 (字段名)

with fillfactor =30

1 unique 指定唯一索引 可選

2 clustered nonclustered 指定是聚集索引還是非聚集索引, 可選

3 fillfactor 表示填充因子, 指定0--100的值, 該值指示索引頁填滿的空間所占的比例 (百分比越小, 所留得空白空間越大)

什么情況下可以建立索引

1 該列用于頻繁搜索

2 該列用于對數(shù)據(jù)進行排序

請不要對下面的列創(chuàng)建索引

,

1 列中僅包含幾個不同的值

2 表中僅包含幾行.

五 什么是試圖

試圖使另一種查看數(shù)據(jù)庫中一個或多個表中的數(shù)據(jù)的方法. 它是一種虛擬表

試圖通常用來進行以下三種操作

1 篩選表中的行

2 防止未經(jīng)許可的用戶訪問敏感數(shù)據(jù)

3 將多個物理數(shù)據(jù)表抽象為一個邏輯數(shù)據(jù)表

(降低數(shù)據(jù)庫的復雜程度)

好處

1對最終用戶的好處

結(jié)果更容易理解

獲得數(shù)據(jù)更容易

2對開發(fā)人員的好處

限制數(shù)據(jù)檢索更容易

維護應用程序更方便

六 如何創(chuàng)建試圖

create view view_(name)

as

(select 語句)

第六章 存儲過程

一 什么是存儲過程

存儲過程(procedure)類似于java 語言中的方法,它是sql 語句和控制流語句的預編譯集合。 存儲過程的優(yōu)點

1 允許模塊化程序設計

2 允許更快地執(zhí)行

3 減少網(wǎng)絡流量

4 可作為安全機制使用

存儲過程分為以下兩類

1 系統(tǒng)存儲過程

2 用戶自定義的存儲過程

3 擴展存儲過程(系統(tǒng)定義好的,以xp_開頭)

二 常用的系統(tǒng)存儲過程

所有的系統(tǒng)存儲過程的名稱都以sp_開頭

sp_databases (列出服務器上的所有數(shù)據(jù)庫)

,

sp_helpdb (報告有關(guān)指定數(shù)據(jù)庫或所有數(shù)據(jù)庫的信息)

sp_renamedb (更改數(shù)據(jù)庫的名稱)

sp_tables (返回當前環(huán)境下可查詢的對象的列表)

sp_columns (返回某個表列的信息)

sp_help (查看某個表的所有信息)

sp_helpconstraint (查看某個表的約束)

sp_stored_procedures (列出當前環(huán)境中的所有存儲過程)

sp_password (添加或修改登陸帳號的密碼)

sp_helptext (顯示默認值、未加密的存儲過程、用戶定義的存儲過程、觸發(fā)器或試圖的實際文本)

擴展參數(shù)

exec xp_cmdshell dos命令 [no_output]

三 用戶定義的存儲過程

1 創(chuàng)建不帶參數(shù)的存儲過程

create proc[edure] 存儲過程名

[

@參數(shù)1 數(shù)據(jù)類型 [默認值] [output]

@參數(shù)2 數(shù)據(jù)類型 [默認值] [output]

]

as

sql 語句

2 創(chuàng)建步帶參數(shù)的存儲過程

1 輸入?yún)?shù)

可以在調(diào)用時向存儲過程傳遞參數(shù),此類參數(shù)可以用來在存儲過程中傳入值 2 輸出參數(shù)(引用傳遞)

如果希望返回值,則可以使用輸出參數(shù),輸出參數(shù)后有'output' 標記,執(zhí)行存儲過程后, 將把返回值存放在輸出參數(shù)中,可供其它T-SQL 語句讀取訪問

3 創(chuàng)建帶輸出參數(shù)的存儲過程

如果希望調(diào)用存儲過程后,返回一個或多個值,這時需要使用輸出(output)參數(shù)。

使用輸出參數(shù)創(chuàng)建存儲過程時,在參數(shù)后面需要跟隨'output' 關(guān)鍵字,調(diào)用時也需要在變量后跟隨'output' 關(guān)鍵字

四 處理錯誤信息

如果存儲過程變得越來越復雜,則需要在存儲過程中加入錯誤檢查語句

raiserror ({msg_id|msg_str}{,severity,state}[with option[,...n]])

例 raiserror('及格線錯誤,請指定0-100之間的分數(shù),統(tǒng)計中斷退出',16,1)

msg_id 在sysmessages 系統(tǒng)表中指定的用戶定義錯誤信息

msg_str 用戶定義的特定信息,最長255個字符

severity 與特定信息相關(guān)聯(lián),表示用戶定義的嚴重性級別。用戶可使用的級別為0-18級(一般下為16)

19-25級是為sysadmin 固定角色的成員預留的,并需要指定with log選項 20-25

,

為致命錯誤

state 表示錯誤的狀態(tài),是1-127的值

option 指示是否將錯誤記錄到服務器錯誤日至中

標簽: