实验3SQL语⾔—更新操作、视图、索引等操作
实验3 SQL语⾔—更新操作、视图、索引等操作
实验⽬的要求
熟悉数据库的数据更新操作,能够使⽤SQL语句对数据库进⾏数据的插⼊、修改、删除操作。
熟悉SQL语⾔有关视图的操作,能够熟练使⽤SQL语句来创建需要的视图,定义数据库外模式,并能使⽤所创建的视图实现数据管理。
掌握索引设计原则和技巧,能够创建合适的索引以提⾼数据库查询。
实验主要内容
针对SQL Server数据库设计单元组插⼊、批量数据插⼊、修改数据和删除数据等SQL语句。理解和掌握INSERT、UPDATE和DELETE语法结构的各个组成成分,结合嵌套SQL⼦查询,分别设计⼏种不同形式的插⼊、修改和删除数据的语句,并调试成功。
针对给定的数据库模式,以及相应的应⽤需求,创建视图、创建带WITH CHECK OPTION的视图,并验
证视图WITH CHECK OPTION选项的有效性。理解和掌握视图消解执⾏原理,掌握可更新视图和不可更新视图的区别
针对给定的数据库模式和具体应⽤需求,创建唯⼀索引、函数索引、复合索引等;修改索引;删除索引。设计相应的SQL查询验证索引有效性。
实验仪器设备
学⽣每个⼀台PC
已安装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='系统分析与设计';
批量更新sql语句
--删除多个元组
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# ,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;
思考题
为什么不能随意删除被参考表中的主码。
删除主码会破坏数据的完整性,所以不能删除主码。
数据库中⼀般不允许更改主码数据。如果需要更改主码数据时,怎样处理?
每次修改的时候检查⼀下改过之后的数据在数据库存中是否存在。SQL: SELECT * FROM 表名 WHERE 主键 = 更改过后的值。
两种SQL Server的安全认证模式及特点。
混合模式,百就是使⽤windos集成的⾝份验证也可以,使⽤ Server独⽴认证也可以。这种⽅式验证⽅式较宽,安全性跟兼容性是较为平衡的。
Windows集成⾝份验证,仅度仅⽀持windos集成的⾝份,这种⽅式⽐较不安全,因为没有 Server的独
⽴授权,与Windows⾃⾝的权限可能出现专交叉问题,会造成安全问题。
什么是触发器?主要功能时什么?
触发器可以查询其他表,⽽且可以包含复杂的 SQL语句。它们主要⽤于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插⼊新订单。
  触发器也可⽤于强制引⽤完整性,以便在多个表中添加、更新或删除⾏时,保留在这些表之间所定义的关系。然⽽,强制引⽤完整性的最好⽅法是在相关表中定义主键和外键约束。如果使⽤数据库关系图,则可以在表之间创建关系以⾃动创建外键约束。
触发器的主要作⽤是:
①完成⽐CHECK约束更复杂的数据约束。触发器可以引⽤其他表中的列。
②为保证数据库性能⽽维护的⾮规范化数据。⽐如,为了提⾼数据的统计效率,在销售情况表中增加了统计销售总量的列,以后,每当在此表中插⼊数据时,
都是⽤触发器统计销售总值列的新数值,并将统计后的新值保存在此表中。以后当查询销售总值时,直接从表中提取数据即可,⽽⽆须再使⽤查询语句进⾏统计,从⽽提⾼数据的统计效率。
③实现复杂的业务规则,触发器可以使业务的处理任务⾃动进⾏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。