《数据库原理与应用》实验指导书
更新时间:2024-05-18 22:02:01 阅读量: 综合文库 文档下载
- 数据库原理与应用实验报告推荐度:
- 相关推荐
《数据库原理与应用》实验指导书
万雪勇
安全管理系 2011.9
目 录
实验1 数据库和表的建立及数据完整性设置 实验2 SQL实验3 SQL实验4 实验5 实验6 实验7 实验8 实验9 查询操作 数据操作与视图 数据库的安全性管理 存储过程和触发器 数据库的备份与恢复 数据库应用系统综合设计 事务并发控制操作
简单的Web数据库应用(选做)
1
实验1 数据库和表的建立及数据完整性设置
一、实验目的:
1. 掌握表(关系)的建立方法;
2. 掌握表结构(关系模式)的修改方法;
3. 实践DBMS提供的数据完整性功能,加深对数据完整性的理解。
二、实验内容:
1. 在studentdb数据库中利用查询分析器创建以下3个表,同时完成数据完整性的定义(实体完整性、参照完整性和用户定义的域完整性): student(学生信息表): 主码 Pk 列名 sno sname ssex sage sdept 数据类型 char char char smallint char 宽度 9 10 2 15 小数位 空否 N N Y Y Y 取值范围 不小于12 备 注 学号 姓名 性别 年龄 系名
course(课程表): 主码 Pk 列名 cno cname cpno ccredit 数据类型 Char Char Char smallint 宽度 4 20 4 小数位 空否 N Y Y Y 备 注 课程号 课程名称 先行课号 学分
sc(学生选课表): 主码 Pk 2. 在spjdb数据库中利用查询分析器创建以下4个表,同时完成数据完整性的定义(实体完整性、参照完整性和用户定义的域完整性): S(供应商信息表): 主码 Pk 列名 sno sname status city 数据类型 char char smallint char 宽度 2 10 10 小数位 空否 N N Y Y 取值范围 大于0 备 注 供应商号 供应商名称 供应商状态 所在城市 列名 sno cno grade 数据类型 宽度 Char Char Decimal 9 4 5 小数 1 空否 N N Y 外码 Fk Fk 参照关系 student course 取值范围 0≤x≤100 备 注 学号 课程号 成绩
P(零件信息表): 主码 Pk 列名 pno 数据类型 char 宽度 2 小数位 空否 N 取值范围 备 注 零件号 pname color weight char char smallint 10 2 N Y Y 大于0 零件名称 颜色 重量
J(工程项目表): 主码 Pk
SPJ(供应情况表): 主码 Pk 列名 sno pno jno qty 数据类型 宽度 小数 Char Char Char smallint 2 2 2 空否 N N N Y 外码 Fk Fk Fk 参照关系 取值范围 S P J x>0 备 注 供应商号 零件号 工程项目号 数量 列名 jno jname city 数据类型 char char char 宽度 2 10 10 小数位 空否 N N Y 取值范围 备 注 工程项目号 工程项目名称 所在城市 3.修改表结构,具体要求如下:
(1) 将表course的cname列的数据类型改为varchar(40).
(2) 为表student增加一个新列: birthday(出生日期), 类型为datetime, 默认为空值. (3) 将表sc中的grade列的取值范围改为小于等于150的正数. (4) 为Student表的“Ssex”字段创建一个缺省约束,缺省值为?男?
(5)为“Sdept”字段创建一个检查约束,使得所在系必须是?CS?、?MA?或?IS?之一。 (6)为Student表的“Sname”字段增加一个唯一性约束 (7)为SC表建立外键,依赖于Student表的fk_S_c约束。
(8)禁止启用Student表的“Sdept”的CHECK约束ck_student。 4.分别建立以下索引(如果不能成功建立,请分析原因) (1) 在student表的sname列上建立普通降序索引. (2) 在course表的cname列上建立唯一索引. (3) 在sc表的sno列上建立聚集索引.
(4) 在spj表的sno(升序), pno(升序)和jno(降序)三列上建立一个普通索引.
三、提 示:
1. 建立表, 修改表, 建立索引需具有create table的权限. 2. 创建基本表的SQL语句是CREATE TABLE . 简单语法格式:
CREATE TABLE 表名
( 列名 数据类型 [default 缺省值] [not null] [,列名 数据类型 [default 缺省值] [not null]]
……
[,primary key(列名 [,列名] …)] [,foreign key (列名 [,列名] …) references 表名 (列名 [,列名] …)] [,check(条件)] );
1
一般语法格式:
CREATE TABLE [ database_name.[owner].] table_name
({
[ON { filegroup | DEFAULT }] [TEXTIMAGE_ON {filegroup | DEFAULT }]
参数说明:
①[database_name.[owner].] table_name:定义表的名字,表名的长度不得超过128个字节,如果是临时表,则表名不能超过116个字符。
②
③column_name:列的名字。列的命名必须遵守有关数据库对象的命名规则。 ④data_type:列的数据类型。
⑤DEFAULT constant_expression:定义该列的默认值。 ⑥IDENTITY:定义该列是一个标识列。当一个新的数据行插入表中的时候,SQL Server2000为标识列提供一个唯一的、递增的数值。在一张表格中,只能定义一个标识列。在定义标识列时,必须同时定义起始值和增量。
⑦Seed:定义标识列的起始值。所谓起始值就是插入表的第一行的数据的标识列的值。Increment:定义标识列的增量。所谓增量就是插入表的最近一行相对与前一行标识列的数据值的增量。
⑧ROWGUIDCOL:定义该列是一个行全局唯一的标识列。在一张表中只有一个唯一标识符列可以被定义为ROWGUIDCOL。column_constraint:定义与列相关联的约束。
⑨table_constraint:定义对表的约束。
⑩ON { filegroup | DEFAULT }:定义将表存储在某一个指定的文件组中,DEFAULT表示将表存储在默认文件组中。[TEXTIMAGE_ON {filegroup | DEFAULT }]:如果表中有ntext、text或image类型的数据,则将这些数据存储在某一个指定的文件组里。
3. 修改表结构的SQL语句是ALTER TABLE, 修改的内容包括:修改、增加、删除列或约束、使约束和触发器无效等。 简单语法格式:
alter table <表名>
[add <列名> <数据类型> [<列级完整性约束>]] // 增加新列 [drop <完整性约束名>]
// 删除约束
[drop column <列名>]
// 删除列
[alter column <列名> <数据类型> [<列级完整性约束>] ]; //修改列定义
其中列级完整性约束包括:
·空值约束 NOT NULL和NULL ·主关键字约束 PRIMARY KEY ·唯一性约束 UNIQUE
·参照完整性约束 FOREIGN KEY
一般语法格式:
ALTER TABLE table
2
{[ALTER COLUMN column_name { new_data_type [NULL| NOT NULL]|{ADD |DROP} ROWGUIDCOL }]
|ADD {[
|DROP {[CONSTRAINT] constraint_name |COLUMN column }[,…n] |{CHECK |NOCHECK} CONSTRAINT {ALL | constraint_name [,…n] |{ENABLE |DISABLE} TRIGGER {ALL |trigger_name [,…n]}
参数说明:
①ALTER COLUMN:修改已经存在的列的属性。
②{ADD |DROP} ROWGUIDCOL:将指定列定义成ROWGUIDCOL,或者删除该列的ROWGUIDCOL属性。
③ADD {[
④ADD {}[,…n]:定义新的表约束。
⑤DROP { [CONSTRAINT] constraint_name |COLUMN column }[,…n]:删除约束或删除列。
⑥{CHECK |NOCHECK} CONSTRAINT {ALL | constraint_name [,…n]}:使所有约束或者指定的约束有效或失效。
例:使cnst_example表中的约束salary_cap失效。
ALTER TABLE cnst_example NOCHECK CONSTRAINT salary_cap
⑦{ENABLE |DISABLE} TRIGGER {ALL |trigger_name [,…n]}:使所有或部分触发器有效或无效。
例:使用T_SQL语句对学生表进行各种修改。
①向表中添加新的字段:在学生表中添加一个“class”字段,数据类型为字符型。 ALTER TABLE student add class char(10)
②删除表中的旧列:将学生表中的“class”字段删除。 ALTER TABLE student DROP column class ③更改表中的约束:
删除某列的约束:将SC表中的外码约束FK_sc_sno删除。
ALTER TABLE sc DROP FK_sc_sno
将Student表中的主码约束PK_student_sno删除。
ALTER TABLE student DROP PK_student_sno
为某列添加约束:为Student表的“Ssex”字段创建一个缺省约束,缺省值为?男?。
ALTER TABLE student ADD constraint def_ssex DEFAULT '男' FOR ssex 更改Student表中的“sno”字段的宽度为10及非空约束。
ALTER TABLE student ALTER COLUMN sno char(10) NOT NULL 为Student表添加一个主码约束PK_student_sno。
ALTER TABLE student ADD CONSTRAINT PK_student_sno PRIMARY KEY(sno) 为SC表添加一个外码约束FK_sc_sno。
ALTER TABLE sc ADD CONSTRAINT FK_sc_sno FOREIGN KEY (sno)
REFERENCES student(sno)
④给学生表增加“grade”字段并加上CHECK约束,让其不可以大于100。 ALTER TABLE student ADD grade int Constraint ch_grade check(grade<100) Exec sp_help student
⑤给学生表中添加“birthday”字段,并且这个日期不能在录入当天的日期之后。
3
Alter table student Add birthday DATETIME NULL CONSTRAINT ch_birthday CHECK (birthday ⑥添加具有默认值的可为空的列: 在学生表中加入“matriculationday”字段,并且这一字段的默认值为录入当天的日期。 Alter table student Add matriculationday smalldatetime NULL Constraint adddateflt Default getdate() 4.建立索引的SQL语句是CREATE INDEX, 语法格式: CREATE [UNIQUE] [CLUSTERED] INDEX <索引名> ON <表名>(<列名>[ ASC | DESC ] [,<列名>[ ASC | DESC ] … ] ) 其中 UNIQUE指出是唯一索引, CLUSTERED指出是聚集索引。 4 实验2 SQL查询操作 一、实验目的: 1. 熟练掌握SELECT语句,能够运用该语句完成各种查询; 2. 观察查询结果, 体会SELECT语句实际应用; 3.要求学生能够在查询分析器中使用SELECT语句进行单表查询和多表查询。 二、实验内容: 完成如下查询: 1. 参照教材P82表中的数据,完成以下查询: (1)查询course表中所有学分大于2并且序号小于5的课程信息。 (2)查询学分界于2和8之间的课程的信息。 (3)从course表中查询出课程号为1或4或7的课程的课程号、课程名称、以及学分。 (4)从course表中查询学分大于3的课程信息,并按课程号升序排列。 (5)查询每个学生及其课程的平均分情况。 (6)查询选修2号课程且成绩在80分以上的学生信息。 (7)查询每个学生的学号、姓名、选修的课程及成绩。 (8)查询所有计算机系学生的学号、选修课程号以及分数。(使用IN谓词)。 (9)查询选修了课程名为“操作系统”的学生学号和姓名。 (10)查询所有计算机系学生的学号、选修课程号以及分数(使用EXISTS谓词)。 2.(选做) 参照教材P75表中的数据,完成P127习题5中(1)~(7)的查询。 三、提示: 1. SELECT语句的语法格式如下: 基本格式: SELECT [ALL|DISTINCT] <表达式1>[,<表达式2>… ] FROM <表名1>[,<表名2>… ] [WHERE <逻辑表达式>] [GROUP BY <列名>[,<列名>… ][HAVING <谓词|条件>]] [ORDER BY <列名>[ASC|DESC][,<列名>[ASC|DESC]… ]] 一般格式: SELECT [ALL|DISTINCT] [TOP n [PERCENT] [WITH TIES]] [ FROM { < table_source > } [ , ... n ] ] [ WHERE < search_condition > | < old_outer_join > ] [ GROUP BY [ ALL ] group_by_expression [ , ... n ] [ WITH { CUBE | ROLLUP } ] ] [HAVING [[AS] column_alias]}[,…n] < table_source > ::= table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ] | view_name [ [ AS ] table_alias ] [ WITH ( < view_hint > [ ,...n ] ) ] | rowset_function [ [ AS ] table_alias ] 5 | user_defined_function [ [ AS ] table_alias ] | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ] | < joined_table > < joined_table > ::= < table_source > < join_type > < table_source > ON < search_condition > | < table_source > CROSS JOIN < table_source > | [ ( ) < joined_table > [ ] ] < join_type > ::= [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ] [ < join_hint > ] JOIN < old_outer_join > ::= column_name { * = | = * } column_name 参数说明: (1)ALL:默认设置,指定在结果集中可以显示重复行。 (2)DISTINCT:指定在结果集中只能显示唯一行,空值被认为相等。 (3)TOP n:指定只从查询结果集中输出前n行。N是介于0~4294967295之间的整数。 (4)PERCENT:从结果集中输出前百分之几行,当指定时带PERCENT,n的值必须介于0~100之间。 (5)WITH TIES:指定从结果集中返回附加的行,这些行包含与出现在TOP n(PERCENT)行最后的ORDER BY列中的值相等的值。如果指定了ORDER BY子句,则只能指定TOP…WITH TIES。 (6) 用户若要执行带 INTO 子句的 SELECT 语句,必须在目的数据库内具有 CREATE TABLE 权限。SELECT...INTO 不能与 COMPUTE 子句一起使用。new_table 的格式通过对选择列表中的表达式进行取值来确定。new_table 中的列按选择列表指定的顺序创建。new_table 中的每列有与选择列表中的相应表达式相同的名称、数据类型和值。 (8) FROM < table_source >: 指定要在Transact-SQL语句中使用的表或视图(带或不带别名均可)。可在语句中使用多达256个表。可将table变量指定为表源。 < table_source >中的参数说明见(19)。 (9)< old_outer_join >: 使用不标准的产品专用语法和 WHERE 子句指定外联接。*= 运算符用于指定左向外联接,=* 运算符用于指定右向外联接。 注:这种语法具有潜在的二义性解释并且不标准,因此不提倡使用这种语法进行外联接。而应在 FROM 子句中使用联接运算符指定联接。不能在同一语句中同时使用这两种方法。 (10) (11) *:指定在FROM子句内返回所有表和视图内的所有列,列按FROM子句所指定的由表或视图返回,并按他们在表或视图中的顺序返回。 (12)column_name:要返回的列名,必要时限定column_name以避免二义性引用,当FROM子句中的两个表内包含重复名的列时会出现该情况。 (13)column_alias:是查询结果集内替换列名的可选名。 (14)GROUP BY ALL: 包含所有组和结果集,甚至包含那些任何行都不满足 WHERE 子句指定的搜索条件的组和结果集。如果指定了 ALL,将对组中不满足搜索条件的汇总列返回空值。不能用 CUBE 或 ROLLUP 运算符指定 ALL。 如果访问远程表的查询中有 WHERE 子句,则不支持 GROUP BY ALL 操作。 (15)group_by_expression : 是对其执行分组的表达式。group_by_expression 也称为分组列。group_by expression 可以是列或引用列的非聚合表达式。在选择列表内定义的列的别名不能用于指定分组列。 6 说明 text、ntext 和 image 类型的列不能用于 group_by_expression。 对于不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression 的项数受查询所涉及的 GROUP BY 列的大小、聚合列和聚合值的限制。该限制从 8,060 字节的限制开始,对保存中间查询结果所需的中间级工作表有 8,060 字节的限制。如果指定了 CUBE 或 ROLLUP,则最多只能有 10 个分组表达式。 (16)CUBE: 指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。 结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。 (17)ROLLUP: 指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。 重要提示:使用 CUBE 或 ROLLUP 时,不支持区分聚合,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用这类聚合,SQL Server 将返回错误信息并取消查询。 (18) HAVING 注:在HAVING子句中不能使用text、image和ntext数据类型。在SELECT语句中使用HAVING 子句不影响CUBE运算符分组结果集和返回汇总聚合行的方式。 (19) < table_source >中的参数说明: table_name: 表名。FROM 关键字之后的表和视图的顺序并不影响返回的结果集。当 FROM 子句中出现重复名称时将报告错误。 [AS] table_alias: table_name、view_name 或 rowset_function 的别名,为方便起见而使用,或用于区分自联接或子查询中的表或视图。别名通常是一个缩短了的表名,用于在联接中引用表中的特定列。如果联接中的多个表中有相同名称的列存在,SQL Server 要求必须使用表名或别名来限定列名。(如果定义了别名则不能使用表名)。 WITH ( < table_hint > ) : 指定表扫描、查询优化器要使用的一个或多个索引或查询优化器要对此表、此语句使用的锁定方法。有关更多信息,请参见\表提示\。 view_name: 是视图名称。视图是一个\虚拟表\,通常创建为一个或多个表中列的子集。 WITH ( < view_hint > ) :指定索引视图扫描。默认情况下,视图在查询优化器处理查询之前展开。视图提示只能用在 SELECT 语句中,而不能用于 UPDATE、DELETE 或 INSERT 语句。 rowset_function: 指定一个行集函数,该函数返回可替代表引用的对象。 user_defined_function : 指定用户定义的函数,该函数返回一个表。如果用户定义的函数是一个内置的用户定义函数,则前面必须加两个冒号,如:FROM ::fn_listextendedproperty derived_table: 是从数据库中检索行的子查询。derived_table 用作对外部查询的输入。 column_alias: 替换结果集内列名的可选别名。在选择列表中放入每个列的一个别名,并将整个列别名列表用圆括号括起来。 FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3 RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4 ON tab3.c1 = tab4.c1 7 实验8 事务并发控制操作 一、实验目的 使学生能够理解和掌握SQL Server2000提供的三种封锁机制。 二、实验内容 1、SQL Server2000提供了三种封锁机制 为了保证数据的一致性,并且允许最大量的并发用户,SQL Server2000提供了三种封锁机制,即独占封锁、共享封锁和更新封锁。封锁的对象可以是表格、页或者记录。 ?共享封锁:共享封锁是为读操作设置的一种封锁,目的是想读到一组不变的数据,也就是在读数据的过程中,不允许其他用户对该数据进行任何修改操作。 ?更新封锁:当需要对一个记录或一组记录进行更新时 (只是修改,不包括插入和删除)使用更新封锁,该封锁的目的是防止其他用户在同一时刻修改同一记录。已经实施更新封锁的记录,拒绝来自其他用户的更新封锁或独占封锁。 ?独占封锁:独占封锁也叫排他封锁,这是最严格的一类封锁。当需要对表实施插入、删除或修改操作时,应该使用独占封锁。已经实施独占封锁的表,拒绝来自其他用户的任何封锁,但不拒绝其他用户的一般读操作。 所有的封锁都将在事务结束(提交或撤消)时自动释放。SQL Server2000 使用SELECT语句完成封锁操作,在指定选择的表的同时在FROM子句中指定对表所实施的封锁。 2、SQL Server2000的封锁命令 SQL Server2000的封锁操作是在相关语句的“WITH (table_hint)子句中完成的,可用在SELECT、INSERT、UPDATE、DELETE等语句中指定表级锁定的方式和范围。常用的封锁关键词有: ?TABLOCK:对表施加共享锁,在读完数据后立即释放封锁,它可以避免读“脏”数据,但可能引起不可重复读问题。 ?HOLDLOCK:与TABLOCK一起使用,可将共享锁保留到事务完成,而不是在读完数据后立即释放,它可以保证数据的可重复读。 ?NOLOCK:不施加任何封锁,仅用于SELECT语句,它会引起读“脏”数据。 ?TABLOCKX:对表施加排它锁。 UPDLOCK:对表中指定元组施加更新锁,这时其他事务可对同表中的其他元组也施加更新锁,但不能对表施加任何锁。 3、SQL Server2000的4种隔离级别 SQL Server2000支持标准SQL中定义的隔离级别: ?未提交读(READ UNCOMMITED):事务隔离的最低级别,仅可保证不读物理损坏的数据。 ?提交读(READ COMMITED):SQL Server2000的默认级别,可以保证不读“脏”数据。 ?可重复读(REPEATABLE READ):可以保证读一致性。 ?可串行化(SERIALIZABLE):事务隔离的最高级别,事务之间完全隔离,在该级别上可以保证并发事务均是可串行的。 事务必须运行在可重复读或更高隔离级别上才可防止丢失更新。设置隔离级别的命令是: SET TRANSACTION ISOLATION LEVEL {READ COMMITED | READ UNCOMMITED | REPEATABLE READ| SERIALIZABLE} 提示: 1. 建测试表sales CREATE TABLE sales ( id char(5), 23 qty int, b int ); 输入数据: insert into sales values( 'A0001', 0,10 ); 2. 事务原子性实验 定义如下事务,运行结束前,停止SQL SERVER服务,然后重启服务查看qty和b的值是否有变化。 begin tran update sales set qty = qty - 10 where id = 'A0001' waitfor delay '00:00:30.000' update sales set b = b + 10 where id = 'A0001' commit tran 定义如下SQL语句,运行结束前,停止SQL SERVER服务,然后重启服务查看qty和b的值是否有变化。 update sales set qty = qty - 10 where id = 'A0001' waitfor delay '00:00:30.000' update sales set b = b + 10 where id = 'A0001' 3.丢失修改 例1: 事务一和事务二代码相同,如下 declare @sl int begin tran select @sl = qty from sales where id = 'A0001' waitfor delay '00:00:30.000' update sales set qty = @sl - 1 where id = 'A0001' commit tran 执行结果:qty==1,事务一的修改丢失。 原因:事务执行过程中对操作的数据没有加锁。 例2: 丢失修改 事务一代码 declare @i int declare @sl int select @i = 1 while( @i <= 2000) begin begin tran select @sl = qty from sales where id = 'A0001' waitfor delay '00:00:00.002' update sales set qty = @sl + 1 where id = 'A0001' commit tran select @i = @i + 1 24 end 事务二代码 declare @i int declare @sl int select @i = 1 while( @i <= 2000) begin begin tran select @sl = qty from sales where id = 'A0001' waitfor delay '00:00:00.002' update sales set qty = @sl - 1 where id = 'A0001' commit tran select @i = @i + 1 end 4. 不可重复读 例1: 事务一代码如下 declare @qty int declare @b int begin tran select @qty = qty from sales where id = 'A0001' select @b = b from sales where id = 'A0001' print(@qty+@b) waitfor delay '00:00:5.000' select @qty = qty from sales where id = 'A0001' select @b = b from sales where id = 'A0001' print(@qty+@b) commit tran 事务二代码 declare @b int begin tran select @b = b from sales where id = 'A0001' update sales set b = @b *2 where id = 'A0001' commit tran 例2: 不可重复读 事务一代码如下 declare @i int declare @sl int declare @s2 int select @i = 1 while( @i <= 2000) begin begin tran select @sl = qty from sales where id = 'A0001' waitfor delay '00:00:00.002' 25 select @s2 = qty from sales where id = 'A0001' if(@sl<>@s2) print('non-repeatable read') commit tran select @i = @i + 1 end 事务二代码 declare @i int declare @sl int select @i = 1 while( @i <= 2000) begin begin tran select @sl = qty from sales where id = 'A0001' waitfor delay '00:00:00.002' update sales set qty = @sl + 1 where id = 'A0001' commit tran select @i = @i + 1 end 5. 读脏数据 事务一代码 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED declare @b int begin tran select @b = b from sales where id = 'A0001' print(@b) update sales set b = @b *2 where id = 'A0001' select @b = b from sales where id = 'A0001' print(@b) waitfor delay '00:00:20.000' rollback 事务二代码 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED declare @b int begin tran select @b = b from sales where id = 'A0001' print(@b) commit tran 6. 加锁实验 (1) 一级封锁协议不会丢失修改,但不能保证不出现另两种异常丢失修改. declare @sl int begin tran select @sl = qty from sales with (xlock) where id = 'A0001' waitfor delay '00:00:10.000' update sales set qty = @sl - 1 where id = 'A0001' commit tran 26 不可重复读 事务一 declare @qty int declare @b int begin tran select @qty = qty from sales where id = 'A0001' select @b = b from sales where id = 'A0001' print(@qty+@b) waitfor delay '00:00:15.000' select @qty = qty from sales where id = 'A0001' select @b = b from sales where id = 'A0001' print(@qty+@b) commit tran 事务二 declare @b int begin tran select @b = b from sales with(xlock) where id = 'A0001' update sales set b = @b *2 where id = 'A0001' commit tran 读脏数据 事务一 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED declare @b int begin tran select @b = b from sales with (xlock) where id = 'A0001' print(@b) update sales set b = @b *2 where id = 'A0001' select @b = b from sales where id = 'A0001' print(@b) waitfor delay '00:00:20.000' rollback 事务二 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED declare @b int begin tran select @b = b from sales where id = 'A0001' print(@b) commit tran (2) 二级封锁协议可以避免丢失修改和读脏,但不能保证可重复读。在sql server中默认设置即可避免读脏。 (3) 三级封锁协议可以完全避免这三种异常. 可重复读 27 事务一 declare @qty int declare @b int begin tran select @qty = qty from sales with(holdlock) where id = 'A0001' select @b = b from sales with(holdlock) where id = 'A0001' print(@qty+@b) waitfor delay '00:00:15.000' select @qty = qty from sales where id = 'A0001' select @b = b from sales where id = 'A0001' print(@qty+@b) commit tran 事务二 declare @b int begin tran select @b = b from sales with(xlock) where id = 'A0001' update sales set b = @b *2 where id = 'A0001' commit tran 28 实验9 简单的Web数据库应用(选做) 实验目的: Windows 环境Web服务器IIS的安装、指标配置、测试和使用技能;网页超文本标记语言HTML/DHTML的知识与使用方法; 脚本的应用:JavaScript、VBScript的使用技巧,ASP脚本插入HTML页面的语法规则及操作技巧,使用ASP的服务器端脚本功能接收用户信息方法;通过实例掌握数据库信息的发布技术。学生通过本实验应能够建立一个具有某种功能的站点,供网上用户共享。 1. 使学生能够了解Web技术的特点( HTML,ASP,VBScript, JavaScript, IIS, ODBC, Web ); 2. 理解Web数据库应用中的对象、属性、事件等概念; 3. 熟悉一种Web数据库应用的开发环境( Framework, Dreamweaver, ASP, JSP, PHP ); 4. 利用Web技术,结合ASP和SQL Server构建一个数据管理站点, 初步体会简单的Web数据库应用系统的开发全过程。 实验内容: 自主研制一个基于SQL Server数据库的Web应用系统,能满足Internet用户的如下操作: (1)检查用户登录权限; (2)数据输入和输出; (3)数据维护和统计; (4)灵活的信息查询; (5)正确退出系统。 最后,生成一个Web站点。 29
正在阅读:
《数据库原理与应用》实验指导书05-18
乡村债务危机的预警机制研究03-08
建筑安装工程交工资料目录及表格 - 图文12-28
毕业设计说明书03-08
2001-2017历年专四作文真题范文04-28
土木工程概论论文03-22
养蜂项目实施方案01-05
个人教学工作总结08-23
统计技术应用程序HR-SP-03103-06
- 2010全国高考数学(理)考试大纲
- 2016-2017学年江苏省无锡市高三(上)期末数学试卷和答案
- 2013年河南省专升本经济学考试真题
- 珠海万利达保护整定示例
- 60kV厂用电进线电源二次回路设计(1)(DOC) - 图文
- 2017最新二年级数学教师家长会发言稿
- 医院地震应急预案
- 小学化倾向在幼儿教育中的问题及对策
- 软件测试毕设论文 - 图文
- 2016年贵州省普通高中学业水平物理模拟试卷(解析版)
- 用友java面试题(附答案)
- 2005-2013年上海市大同中学杯初中物理竞赛初赛试卷及答案 - 图文
- 深圳市国家税务局办税指南
- 进出口货物征税管理办法条文及释义
- 科目一理论考试题900道 - 图文
- 机械制造与自动化本科毕业设计论文-数控车床的改造
- 2016年五年级上册写字教案完整通过版
- 涉外谈判与国内谈判有何异同点,简要说明。(出自第七单元)
- 小学班主任培训讲稿
- 2011届高考复习最新6年高考4年模拟分类汇编:专题二十一+
- 指导书
- 原理
- 实验
- 数据库
- 应用
- 云南省2015年上半年混凝土工:原材料的选择模拟试题
- 清华大学 杨虎 应用数理统计课后习题参考答案2
- 设备巡回检查规章制度
- 项目管理手册(第二版)巡视后送审稿
- 实习生电话销售的工作总结,2017年工作总结格式范文
- 中国城市化带来的社会问题 作业
- 2018年新人教版初中英语八年级英语下册期中期末总复习资料
- 备课、上课的理念与实践策略
- 遐想
- 中国服装绣花行业市场调查研究报告(目录) - 图文
- 三基题库--单选
- 买书 - 综合练习一
- 乌拉特前旗年产100万吨水泥粉磨站技改工程可行性研究报告 - 图文
- 打印新人教版四年级下册数学复习资料
- 2007年注册环保工程师真题专业试题
- 济南恒昌小额贷款公司注意事项说明
- 中国火电站设备供应商名录(各专业)
- 小学语文阅读教学的关注点与切入点分解
- 机场特许经营
- 工程经济学复习 1 武汉理工大学出版社