實驗3 SQL語言—更新操作、視圖、索引等操作


實驗3 SQL語言—更新操作、視圖、索引等操作

實驗目的要求

  1. 熟悉數據庫的數據更新操作,能夠使用SQL語句對數據庫進行數據的插入、修改、刪除操作。

  2. 熟悉SQL語言有關視圖的操作,能夠熟練使用SQL語句來創建需要的視圖,定義數據庫外模式,並能使用所創建的視圖實現數據管理。

  3. 掌握索引設計原則和技巧,能夠創建合適的索引以提高數據庫查詢。

實驗主要內容

  1. 針對SQL Server數據庫設計單元組插入、批量數據插入、修改數據和刪除數據等SQL語句。理解和掌握INSERT、UPDATE和DELETE語法結構的各個組成成分,結合嵌套SQL子查詢,分別設計幾種不同形式的插入、修改和刪除數據的語句,並調試成功。

  2. 針對給定的數據庫模式,以及相應的應用需求,創建視圖、創建帶WITH CHECK OPTION的視圖,並驗證視圖WITH CHECK OPTION選項的有效性。理解和掌握視圖消解執行原理,掌握可更新視圖和不可更新視圖的區別

  3. 針對給定的數據庫模式和具體應用需求,創建唯一索引、函數索引、復合索引等;修改索引;刪除索引。設計相應的SQL查詢驗證索引有效性。

實驗儀器設備

  1. 學生每個一台PC
  2. 已安裝SQL Server環境

實驗記錄

數據更新操作

單元組插入

 --向圖書表中插入一條單元組數據('B6','信息論','28.2')
 INSERT 
INTO 圖書(BNO,BNAME,PRICE)
VALUES('B6','信息論','28.2');

批量數據插入

--子查詢嵌套在INSERT語句中用以插入批量數據
CREATE TABLE LNTE
(LNO NCHAR(10) PRIMARY KEY,
TEL INT);  --創建一個新的LNAME-TEL表
--從圖書館表中選擇LNO和TEL兩列數據批量插入新建表LNTE中
INSERT 
INTO LNTE
SELECT LNO,TEL
FROM 圖書館

修改數據

UPDATE 圖書
SET BNAME=大學英語
WHERE BNO='B5';   --將圖書表中的操作系統改為大學英語

--帶子查詢的修改語句可以實現批量修改數據
UPDATE SC
SET GRADE=0
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept='CS');

刪除數據

--刪除一個元組的值
DELETE
FROM 圖書
WHERE BNAME='系統分析與設計';

--刪除多個元組
DELET
FROM 圖書  --這條語句將刪除整個圖書表

--帶子查詢的刪除語句
DELET 
FROM 圖書
WHERE BNO IN
(SELECT BNO
FROM 圖書發行
WHERE QTY=10);

視圖

創建視圖

CREAT VIEW IS_BK
AS
SELECT BNO,BNAME,PRICE
FROM 圖書
WHERE PRICE>10;

帶WITH CHECK OPTION的視圖

CREAT VIEW IS_BK
AS
SELECT BNO,BNAME,PRICE
FROM 圖書
WHERE PRICE>10;
WITH CHECK OPTION;

視圖消解執行原理

把對視圖的查詢轉化為對基本表的查詢稱為視圖的消解(View Resolution).
SELECT S#,SA FROM IS_S WHERE SA <20
消解為:
SELECT S# ,SA FROM S WHERE SD='IS' AND SA 90
消解為:
對:SELECT S#, AVG(GR) FROM SC GROUP BY S# HAVING AVG(GR)>90

可更新視圖和不可更新視圖的區別

一般地行列子視圖是可更新的。除行列子視圖外,有些試圖理論上是可更新的。

目前,各個關系數據庫管理系統一般都只允許對行列子集視圖進行更新,而且各個系統對視圖的更新還有更進一步的規定。

索引

創建唯一索引

CREATE UNIQUE INDEX BKNO ON 圖書(BNO);

創建復合索引

create nonclustered index Index_StuNo_SName
on Student(S_StuNo,S_Name)
with(drop_existing=on)

修改索引

ALTER INDEX BKNO RENAME TO BOOKNO;

刪除索引

DROP INDEX BOOKNO;

驗證索引有效性

SELECT DISTINCT name
FROM part;
CREATE INDEX part_name ON part(name);
--DROP INDEX part_name ON part;

思考題

  1. 為什么不能隨意刪除被參考表中的主碼。

    刪除主碼會破壞數據的完整性,所以不能刪除主碼。

  2. 數據庫中一般不允許更改主碼數據。如果需要更改主碼數據時,怎樣處理?

    每次修改的時候檢查一下改過之后的數據在數據庫存中是否存在。SQL: SELECT * FROM 表名 WHERE 主鍵 = 更改過后的值。

  3. 兩種SQL Server的安全認證模式及特點。

    1. 混合模式,百就是使用windos集成的身份驗證也可以,使用SQL Server獨立認證也可以。這種方式驗證方式較寬,安全性跟兼容性是較為平衡的。
    2. Windows集成身份驗證,僅度僅支持windos集成的身份,這種方式比較不安全,因為沒有SQL Server的獨立授權,與Windows自身的權限可能出現專交叉問題,會造成安全問題。
  4. 什么是觸發器?主要功能時什么?

    觸發器可以查詢其他表,而且可以包含復雜的 SQL語句。它們主要用於強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
      觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用數據庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。

    觸發器的主要作用是:

    ①完成比CHECK約束更復雜的數據約束。觸發器可以引用其他表中的列。

    ②為保證數據庫性能而維護的非規范化數據。比如,為了提高數據的統計效率,在銷售情況表中增加了統計銷售總量的列,以后,每當在此表中插入數據時,都是用觸發器統計銷售總值列的新數值,並將統計后的新值保存在此表中。以后當查詢銷售總值時,直接從表中提取數據即可,而無須再使用查詢語句進行統計,從而提高數據的統計效率。

    ③實現復雜的業務規則,觸發器可以使業務的處理任務自動進行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM