恢复A=100
18、设Tl 和T2两个事务,它们对数据A 的并发操作如图所示(其中SLOCK A 表示对数据A 上S 锁,UNLOCK A 表示对数据A 解锁,COMMIT 表示提交操作)。对这个并发操作,下面5 个评价中的 B 和 D 两条评价是正确的. A .该操作不能重复读 B .该操作丢失修改 C .该操作符合完整性要求
D .该操作的第(l )步中,事务T1 应申请X 锁 E .该操作的第(2 )步中,事务T2 不可能得到对A 的锁 T1 ① 请求 SLOCK A 读A=18 ② ③ A=A+10 写回A=28 COMMIT UNLOCK A ④ T2 请求 SLOCK A 读A=18 写回A=18 COMMIT UNLOCK A 19、解决并发操作带来的数据不一致性问题时普遍采用 A A .封锁
B .恢复 C .存取控制. D .协商
20、若事务T 对数据R 已加X 锁,则其他事务对数据R D A .可以加S 锁不能加X 锁 C .可以加S 锁也可以加X 锁
B .不能加S 锁可以加X 锁 D .不能加任何锁
21、不允许任何其他事务对这个锁定目标再加任何类型锁的锁是_B_。 A .共享锁 B .排他锁 C .共享锁或排他锁 D .以上都不是 22、数据库的封锁机制是_C_的主要方法。 A .完整性 B .安全性
C .并发控制
D .恢复
23、关于“死锁”,下列说法中正确的是 D 。
21
A ,死锁是操作系统中的问题,数据库操作中不存在
B .在数据库操作中防止死锁的方法是禁止两个用户同时操作数据库 C . 当两个用户竞争相同资源时不会发生死锁 D .只有出现并发操作时,才有可能出现死锁
24、对并发操作若不加以控制.可能会带来_D_问题. A .不安全
B .死锁 C .死机
D .不一致
25、数据库系统并发控制的主要方法是采用 C 机制。 A .拒绝
B .改为串行 C .封锁
D .不加任何控制
26、若数据库中只包含成功事务提交的结果,则此数据库就称为处于_B_状态。 A .安全
B .一致 C .不安全
D .不一致
27、若系统在运行过程中,由于某种硬件故障,使存储在外存上的数据部分损失或全部损失,这种情祝称为_C_。
A .事务故障 B .系统故障 C .介质故障 28、用于数据库恢复的重要文件是_C_. A .数据库文件 B .索引文件 C .日志文件 29、 并发操作会带来哪些数据不一致性?_D_。
A .丢失修改、不可重复读、脏读、死锁B . 不可重复读、脏读、死锁 C .丢失修改、脏读、死锁 D .丢失修改、不可重复读、脏读 30、如果事务T获得了数据项Q上的排它锁,则T对Q(D )。
A. 只能读不能写B. 只能写不能读 C. 不能读不能写 D. 既可读又可写 31、DBMS对数据库的锁有共享锁和排它锁,封锁是( C )的主要方法。
A. 安全性控制 B. 完整性控制 C. 并发控制 D. 数据库恢复 32、数据恢复的建立冗余数据的常用技术( A )。
A. 数据转储和登记日志文件 B. 数据备份和加密技术 C. 视图与审计 D. 数据库镜像
D . 备注文件 D .运行故障
第七部分 主要程序代码 主要内容:
1、数据库的创建
2、基本表的创建、修改、完整性操作 3、触发器 4、存储过程 5、游标
22
练习题:
1.创建数据库
create database test on (
name='test1_data',
filename='C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\DATA\\test1.mdf', size=5mb, filegrowth=10%) log on
(name='test1_log',
filename='C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\DATA\\test1.ldf', size=2mb, maxsize=5mb, filegrowth=1mb)
2. 定义表
Create table student
(sno varchar(10) primary key, sname varchar (10) , ssex varchar (2) , sage int ,
sdept varchar (10) ) go
Create table course (cno
varchar (3) primary key ,
cname varchar (30), credit int , cpno go
Create table sc (sno varchar (10), cno varchar (3), grade INT ,
primary key(sno,cno),
foreign key (sno) references student(sno), foreign key (cno) references course(cno) )
varchar (3) )
3. 为表STUDENT创建一级联更新触发器STU_UPDATE,当修改STUDENT表中的 学号时,同时也要将SC表中的学号改成相应的学号
CREATE TRIGGER STU_UPDATE ON STUDENT FOR UPDATE
23
AS
DECLARE @OLD_SNO VARCHAR(10),@NEW_SNO VARCHAR(10) SELECT @OLD_SNO=SNO FROM DELETED SELECT @NEW_SNO=SNO FROM INSERTED
UPDATE SC SET SNO=@NEW_SNO WHERE SNO=@OLD_SNO
4. (1)创建带参数的存储过程,从表student和sc的连接中输入的学生姓名,返回学生的
成绩。
CREATE PROC grade_info @S_name varchar(20) AS
SELECT SNAME, GRADE
FROM STUDENT INNER JOIN SC ON STUDENT.SNO=SC.SNO WHERE SNAME LIKE @S_name 执行:EXEC grade_info '李勇'
(2)创建存储过程student_info,通过输入参数在student表中查找学生,以输出参数获取学生姓名。
CREATE PROC student_info
@student_sno varchar (10), @stuname varchar(10) OUTPUT AS
SELECT @stuname=sname FROM student
WHERE sno=@student_sno
执行:EXECUTE语句还需要关键字OUTPUT以允许参数值返回给变量。 按照位置执行:
DECLARE @stuname VARCHAR (20)
EXEC student_info '95001',@stuname OUTPUT SELECT @stuname as 姓名
5. 为student表中姓名以“王”开头的行声明一个简单的游标w_cursor,并使用fetch next 逐个提取这些行。Fetch语句以单行结果集形式返回由declare cursor指定列的值。
Declare w_cursor CURSOR FOR Select sno,sname from student Where sname like '王%' Open w_cursor
Fetch next from w_cursor While @@fetch_status=0 begin
fetch next from w_cursor end
Close w_cursor Deallocate w_cursor
24