SQL server Base II

THE5

數據庫的設計

一.需求分析階段

 

1.       收集對象

2.       標識對象

3.       標識每個對象的屬性

4.       標識對象之間的關係

 

二.詳細設計階段

 

1.       繪製E – R圖

2.       將E – R圖轉換爲表格

3.       應用三大範式規範表格

1st NF:每列原子性

2st NF: 除主鍵外的其他列都依賴於該主鍵   - - 都和主鍵相關

3st NF: 除主鍵外的其他列都不傳遞依賴於該主鍵  - - 都直接相關 無間接

 

訪問SQL表需要驗證

是否SQL  SERVER帳戶

是否是該數據庫帳戶

是否有足夠的權限操作訪問該表

 

創建登錄

添加windows登錄帳戶

EXEC  sp_grantlogin  ‘域名\用戶名’

 

添加SQL登錄帳戶

EXEC  sp_addlogin  ‘用戶名’, ‘密碼’

 

創建數據庫用戶

EXEC  sp_grantdbaccess  ‘登錄帳戶名’, ‘數據庫用戶名’  

注:數據庫用戶名爲默認數據,同用戶名一致

 

權限類型

GRANT:

在安全系統中創建項目,使當前數據庫中的用戶得以處理當前數據庫中的數據或執行特定的 Transact-SQL 語句。

1 例子:授予語句權限

下面的示例給用戶 Mary 和 John 授予多個語句權限。

GRANT CREATE DATABASE, CREATE TABLE TO Mary, John

授予全部語句權限給用戶Rose

GRANT ALL to Rose

2 例子:授予對象權限

GRANT SELECT ON authors TO public

GRANT INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom

 

DENY:

在安全系統中創建一項,以拒絕給當前數據庫內的安全帳戶授予權限並防止安全帳戶通過其組或角色成員資格繼承權限。

1 例子:拒絕語句權限

下例對多個用戶拒絕多個語句權限。用戶不能使用 CREATE DATABASE 和 CREATE TABLE 語句

DENY CREATE DATABASE, CREATE TABLE TO Mary, John

對用戶Rose拒絕全部語句權限

DENY ALL to Rose

2 例子:拒絕對象權限

DENY INSERT, UPDATE, DELETE ON authors TO Mary, John, Tom

 

REVOKE:

刪除以前在當前數據庫內的用戶上授予或拒絕的權限。

1 廢除類似於拒絕,但是,廢除權限是刪除已授予的權限,並不妨礙用戶、組或角色從更高級別繼承已授予的權限。因此,如果廢除用戶查看錶的權限,不一定能防止用戶查看該表,因爲已將查看該表的權限授予了用戶所屬的角色。

2 角色是權限的一個集合,可以指派給用戶或其它角色。這樣只對角色進行權限設置便可以實現對多個用戶權限的設置

3 舉例:DENY與REVOKE區別

例如,從 HumanResources 角色中刪除 Employees 表上的 SELECT 訪問權限將廢除該權限,從而使 HumanResources 不能再使用該表。如果 HumanResources 是 Administration 角色的成員。如果以後將 Employees 上的 SELECT 權限授予了 Administration,則 HumanResources 的成員可以通過 Administration 中的成員資格看到該表。但是,如果對 HumanResources 拒絕SELECT權限,則即使以後向 Administration 授予權限,HumanResources 也不會繼承該權限

4 例子: 廢除授予用戶帳戶的語句權限

下例廢除已授予用戶 Joe 的 CREATE TABLE 權限。它刪除了允許 Joe 創建表的權限。不過,如果已將 CREATE TABLE 權限授予給了包含 Joe 的任何角色,那麼 Joe 仍可創建表。

REVOKE CREATE TABLE FROM Joe

5 例子: 廢除授予多個用戶帳戶的多個權限

下例廢除授予多個用戶的多個語句權限。

REVOKE CREATE TABLE, CREATE INDEX FROM Mary, John

6 例子: 廢除拒絕的權限

用戶 Mary 是 Budget 角色的成員,已給該角色授予了對 Budget_Data 表的 SELECT 權限。已對Mary 使用 DENY 語句以防止 Mary 通過授予 Budget 角色的權限訪問 Budget_Data 表

下例刪除對 Mary 拒絕的權限,並通過適用於 Budget 角色的 SELECT 權限,允許 Mary 對該表使用 SELECT 語句。

REVOKE SELECT ON Budget_Data TO Mary

 

THE6

使用變量

局部變量

         局部變量以標記@爲前綴

         局部變量爲先聲明再賦值

EXP:

DECLARE  @name  varchar(8)

SET  @name = ‘edward’

全局變量

         全局變量必須以標記@@爲前綴

         全局變量由系統定義和維護,我們只能讀取,不能修改全局變量的值

EXP:

PRINT  '當前SQL版本: ' + @@VERSION

 

邏輯控制語句

IF – ELSE語句

 

IF (條件)

   BEGIN

     語句1

     語句2

     … …

END

ELSE

   BEGIN

     語句1

     語句2

     … …

END

 

 

WHILE語句

 

WHILE (條件)

         BEGIN

       語句1

       語句2

       … …

BREAK

END

 

 

CASE語句

 

CASE

WHEN  條件1  THEN  結果1

WHEN  條件2  THEN  結果2

… …

ELSE  其他結果

END

 

THE7

子查詢  EXISTS  NOT EXISTS 聯接等語句的同功能替換

EXP:

SELECT  *  FROM  stuInfo 

WHERE  EXISTS(SELECT  *  FROM  stuMarks  WHERE  stuNo = stuInfo.stuNo)

 

使用IN子查詢改寫上述語句

SELECT * FROM stuInfo  

WHERE  stuNo  IN  (SELECT  stuNo  FROM  stuMarks)

 

請使用連接改寫上述語句

SELECT  *  FROM  stuInfo 

INNER   JOIN   stuMarks  ON  stuInfo.stuNo = stuMarks.stuNo

 

事物

開始事物

BEGIN  TRANSACTION

 

執行事物

COMMIT  TRANSACTION

 

回滾事物

ROLLBACK  TRANSACTION

 

判斷條件語句是否執行有錯誤

全局變量@@ERROR

因@@ERROR只能判斷前一條T-SQL語句的執行是否出錯,爲了判斷事物中語句是否有錯,需要使用自定義變量累加方法:

DECLARE  @errorSum  INT

SET @errorSum  =  @errorSum  +  @@ERROR

 

索引

CREATE  [UNIQUE] [CLUSTERED | UNCLUSTERED]    - -唯一索引   聚集索引   非聚集索引

  INDEX  index_name

  ON  table_name(columu_name)

[WITH  FILLFACTOR= X]  - -填充因子 0  -   100

 

EXP:

索引的創建

 IF  EXISTS(SELECT  name  FROM  sysindexes

WHERE   name = 引名)

DROP  INDEX  表名. 索引名

GO

 

CREATE ...

 

視圖

CREATE  VIEW  view_name

AS 

<select語句>

 

EXP:

IF  EXISTS  (SELECT  *  FROM  sysobjects  WHERE

            Name = ‘視圖名’)

DROP  VIEW  視圖名

GO

 

CREATE …

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