西北工业大学数据库实验报告7

合集下载

数据库实训报告实验总结

数据库实训报告实验总结

一、实验背景随着信息化时代的到来,数据库技术已成为当今社会的重要技术之一。

为了提高我国高校学生的实践能力,培养适应社会发展需求的数据库技术人才,我校组织了数据库实训课程。

通过本次实训,使学生们能够掌握数据库的基本原理、设计方法和应用技术,提高解决实际问题的能力。

二、实验目的1. 理解数据库的基本概念和原理;2. 掌握数据库的设计方法和步骤;3. 学会使用数据库管理系统进行数据库的创建、修改和查询;4. 培养学生分析问题、解决问题的能力;5. 提高学生的团队合作意识和沟通能力。

三、实验内容本次数据库实训主要包括以下内容:1. 数据库基本概念:数据库、数据库系统、数据库管理系统等;2. 关系数据库:关系模型、关系代数、关系运算等;3. SQL语言:数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)等;4. 数据库设计:需求分析、概念结构设计、逻辑结构设计、物理结构设计等;5. 数据库实现:使用数据库管理系统进行数据库的创建、修改和查询;6. 数据库应用:使用数据库技术解决实际问题。

四、实验过程1. 需求分析:根据实训要求,分析数据库所需解决的问题,确定数据库的功能和性能指标;2. 概念结构设计:根据需求分析,设计数据库的概念结构,包括实体、属性和实体间的关系;3. 逻辑结构设计:将概念结构转换为逻辑结构,包括确定表结构、字段类型、约束条件等;4. 物理结构设计:根据逻辑结构设计,确定数据库的物理存储方式,包括数据文件、索引文件等;5. 数据库创建:使用数据库管理系统创建数据库,包括创建表、索引、视图等;6. 数据操作:使用SQL语言进行数据插入、删除、更新和查询等操作;7. 数据库应用:使用数据库技术解决实际问题,如数据备份、恢复、安全等。

五、实验总结1. 理论与实践相结合:本次实训使我深刻认识到,数据库技术不仅包括理论知识,还需要将理论应用于实践,解决实际问题;2. 数据库设计的重要性:数据库设计是数据库应用的基础,一个良好的数据库设计可以提高数据库的性能和可用性;3. SQL语言的应用:SQL语言是数据库操作的核心,熟练掌握SQL语言可以提高数据库操作效率;4. 团队合作与沟通:在实训过程中,与团队成员密切配合,共同完成任务,提高了我的团队合作意识和沟通能力;5. 实验心得:通过本次实训,我对数据库技术有了更深入的了解,掌握了数据库的基本原理、设计方法和应用技术,为今后的学习和工作打下了坚实的基础。

数据库实验报告

数据库实验报告

实验(一): 熟练掌握SQL语言实验目的:熟悉上机环境,创建数据库,在数据库上建立关系模式,插入数据,进行相应的查询操作。

实验内容:具体包括如下三部分。

一、熟悉上机环境。

客户/服务器结构,数据库服务器在一台NT服务器上,同学们通过客户机(操作系统为Windows 2000)上安装的SQL Server客户端程序, 使用SQL Server数据库服务器。

具体包括:1.了解SQL Server 环境。

鼠标点击开始,进入“Microsoft SQL Server→企业管理器”,点击SQL Server组下的数据库服务器(服务器名称为NEUC-201S(Windows NT)), 可以看到服务器上的圆形标志变为绿色,说明客户端程序已与服务器连接成功。

点击服务器(NEUC-201S(Windows NT))下的数据库,可以看到服务器上已建立的数据库,你可访问你有权访问的数据库,并进行相应的操作功能。

因为,数据库服务器上建有许多数据库, 每个数据库都有一些合法的用户。

2.鼠标点击开始,进入“Microsoft SQL Server→查询分析器”,输入用户名和口令,进入SQL查询分析器。

如:你登录的客户机为27号,那么请以用户名user27,口令为user27登录,登录后缺省连到数据库user27上,user27/user27是数据库user27的创建者,因此用户user27/ user27具有在数据库user27上创建表等一切权力。

3.在SQL查询分析器环境下,你就可进行SQL命令语句操作了。

二、在数据库useri上创建学生选课有关关系模式,并插入相应的数据,实现有关查询。

1.描述学生、课程情况的E-R图如下,请将其转化为用关系数据模型描述的关系模式CREA TE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) UNIQUE,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20));CREA TE TABLE Course(Cno CHAR(4) PRIMARY KEY,Cname CHAR(40),Cpno CHAR(4),Ccredit SMALLINT,FOREIGN KEY (Cpno) REFERENCES Course(Cno) );CREA TE TABLE SC(Sno CHAR(9),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno) REFERENCES Student(Sno), FOREIGN KEY(Cno) REFERENCES Course(Cno) );4在已建立的关系模式之上(已插入一些数据)建立主键约束,参照约束和用户定义的约束(要求学生年龄不小于14岁,不大于35岁),如果约束不能建立,请分析原因,修改后建立上述约束。

数据库实验实训报告范文

数据库实验实训报告范文

一、实验背景与目的随着信息技术的飞速发展,数据库技术在各行各业中的应用越来越广泛。

为了使同学们更好地掌握数据库的基本原理、设计方法和应用技术,提高动手能力,本次实验实训旨在通过一系列的数据库实验,使同学们熟悉数据库管理系统的使用,掌握数据库设计、创建、查询、维护等基本操作,提高数据库应用能力。

二、实验环境与工具1. 实验环境:Windows 10操作系统,SQL Server 2019数据库管理系统。

2. 实验工具:SQL Server Management Studio(SSMS)。

三、实验内容与步骤1. 数据库设计(1)分析业务需求:根据实验要求,设计一个学生信息管理系统,包含学生、课程、成绩等实体。

(2)确定实体关系:分析实体之间的联系,确定实体之间的关系,如一对多、多对多等。

(3)设计数据表结构:根据实体关系,设计数据表结构,包括字段名、数据类型、约束等。

2. 数据库创建(1)创建数据库:使用SSMS连接到本地SQL Server实例,创建一个新的数据库。

(2)创建数据表:在数据库中创建学生、课程、成绩等数据表,并设置相应的字段和约束。

3. 数据插入与查询(1)插入数据:向数据表中插入数据,包括学生信息、课程信息、成绩信息等。

(2)查询数据:使用SELECT语句进行数据查询,包括简单查询、条件查询、连接查询等。

4. 数据更新与删除(1)更新数据:使用UPDATE语句更新数据表中指定的记录。

(2)删除数据:使用DELETE语句删除数据表中指定的记录。

5. 视图与存储过程(1)创建视图:根据实际需求,创建视图,简化查询操作。

(2)创建存储过程:编写存储过程,实现数据的批量插入、更新、删除等操作。

四、实验结果与分析1. 数据库设计本次实验中,我们成功设计了一个学生信息管理系统,包括学生、课程、成绩等实体,并确定了实体之间的关系。

数据表结构设计合理,满足业务需求。

2. 数据库创建成功创建了数据库和数据表,并设置了相应的字段和约束。

《数据库实验报告》word版

《数据库实验报告》word版

《数据库实验报告》word版
一、实验目的
本次实验的目的是掌握SQL Server和MySQL的基本操作和基础语法知识,能够熟练地创建和管理数据库、数据表和视图,并能实现基本的数据操作和查询。

二、实验环境
本次实验使用的工具为SQL Server Management Studio和MySQL Workbench,数据库采用的是本地安装的SQL Server 2019和MySQL 8.0。

三、实验步骤
1. 使用SQL Server Management Studio创建数据库
CREATE DATABASE TestDB;
执行该语句,即可创建名为TestDB的数据库。

2. 使用MySQL Workbench创建数据库
打开MySQL Workbench,连接本地MySQL数据库,选择“管理”菜单栏,点击“新建连接”,输入用户名和密码,点击“测试连接”,连接成功后,点击“新建模式”,输入模式名称,选择“UTF-8”编码,点击“应用”,即可创建一个新的数据库。

在TestDB数据库中创建一个名为“Student”的数据表,包含学生的姓名、学号、年龄和性别信息。

输入以下SQL语句:
USE TestDB;
CREATE TABLE Student(
Name VARCHAR(20) NOT NULL,
ID INT PRIMARY KEY,
Age INT,
Gender VARCHAR(2)
);
在Student数据表中插入三条学生信息。

输入以下SQL语句:
执行该语句,即可成功插入三条学生信息。

SELECT * FROM Student;
四、实验总结。

(完整版)数据库实验报告

(完整版)数据库实验报告

数据库实验报告姓名学号目录一.实验标题:2二.实验目的:2三.实验内容:2四.上机软件:3五.实验步骤:3(一)SQL Server 2016简介3(二)创建数据库 4(三)创建数据库表 7(四)添加数据17六.分析与讨论: 19一.实验标题:创建数据库和数据表二.实验目的:1.理解数据库、数据表、约束等相关概念;2.掌握创建数据库的T-SQL命令;3.掌握创建和修改数据表的T-SQL命令;4.掌握创建数据表中约束的T-SQL命令和方法;5.掌握向数据表中添加数据的T-SQL命令和方法三.实验内容:1.打开“我的电脑”或“资源管理器”,在磁盘空间以自己的姓名或学号建立文件夹;2.在SQL Server Management Studio中,使用create database命令建立“学生-选课”数据库,数据库文件存储在步骤1建立的文件夹下,数据库文件名称自由定义;3.在建立的“学生-选课”数据库中建立学生、课程和选课三张表,其结构及约束条件如表所示,要求为属性选择合适的数据长度;4.添加具体数据;四.上机软件:SQL Server 2016五.实验步骤:(一)SQL Server 2016简介1.SQL Server 2016的界面2.启动和退出SQL Server 20161)双击图标,即出现SQL Server2016的初始界2)选择“文件”菜单中的“退出”命令,或单击控制按钮中的“×”即可注意事项:1.在退出SQL Server 2016之前,应先将已经打开的数据库进行保存,2.如果没有执行保存命令,系统会自动出现保存提示框,根据需要选择相应的操作(二)创建数据库方法一:1.点击“新建查询”,出现如下对话框2.在空白区域输入创建数据库“学生选课”的代码命令,点击“执行”3.消息框中出现“命令已成功完成”即表示数据库创建成功,在“对象资源管理器”中,右击“数据库”,打开快捷菜单,选择“刷新”命令,在“数据库”向下会出现新创建的数据库“学生选课”方法二:1.右击数据库,在弹出的快捷菜单中选择“新建”2.在弹出的对话框中输入“学生选课”3. 在“对象资源管理器”中,右击“数据库”,打开快捷菜单,选择“刷新”命令,在“数据库”向下会出现新创建的数据库“学生选课”注意事项:数据库名称在服务器中必须唯一,并且符合标识符的规则(三)创建数据库表1.左键点击“学生选课”数据库,再点击“新建查询”,在出现的空白对话框中输入如图代码后点击“执行”,消息框中出现“命令已成功执行”即成功建立好学生、课程、选课三张表2.建立成功后的表格如图所示注意事项:1.T-SQL中创建数据库表的指令格式为:Create table 表名(字段名1 数据类型{identify | not null | null},字段名2 数据类型{identify | not null | null},……)null表示该字段的值可以为控制,空值意味着没有任何存储数据,这是默认参数,当所定义的字段允许空值时,参数null可以忽略not null表示该字段的值不能为空值identify称为计数器,表示该字段的值是一组递增的证书数据。

西北工业大学-操作系统实验报告-实验七

西北工业大学-操作系统实验报告-实验七

实验七消息及其传送机制一、实验目的(1)了解什么是消息。

(2)熟悉消息传送的机理。

二、实验内容与要求1、消息的创建、发送和接收。

使用系统调用msgget( ),msgsnd( ),msgrev( ),及msgctl( )编制一长度为256Bytes的消息发送和接收的程序,将自己的进程号传递给对方,并输出至屏幕。

2、对整个实验过程进行分析总结,给出详细步骤。

三、实验过程1、编写程序实现消息的创建、发送和接收。

将参考程序用vi编辑器录入,然后编译执行。

1、client.c#include <unistd.h>#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MSGKEY 75 /*定义一个消息关键字*/struct msgform /*定义一个结构,它是一个消息的模式,只说明结构的形式*/{ long mtype; /*消息类型*/char mtext[256]; /*消息正文数组*/};int main(){{struct msgform msg; /*定义msg是前面说明的消息结构类型的变量*/int msggid,pid,*pint;msggid=msgget(MSGKEY,0777); /*用系统调用创建一个消息队列*/pid=getpid(); /*获得当前进程的PID*/printf(“client:pid=%d\n”, pid);pint=(int*)msg.mtext; /*将消息正文的头指针赋给指针变量pint*/*pint=pid;msg.mtype=1; /*指定客户进程的消息类型为1*/msgsnd(msggid,&msg,sizeof(int),0); /*向msggid的消息队列发送消息msg*/msgrcv(msggid,&msg,256,pid,0); /*接收pid类型的消息 */printf(“client:receive from pid %d\n”,*pint);return 0;}2、server.c#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include < signal.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#define MSGKEY 75 /*定义一个消息关键字*/struct msgform /*定义一个与客户端相同的消息关键字*/{ long mtype; /*消息类型*/char mtext[256]; /*消息正文数组*/}msg; /*也可以使用这种方式说明消息结构变量*/void cleanup(int signo); /*说明一个外部函数*/int msgqid;int main(){int i,pid,*pint;for ( i=0; i<23; i++) /*对22个软中断的特殊处理*/signal(i, cleanup); /*若收到22个软中断,转向执行cleanup*/msggid=msgget(MSGKEY,0777|IPC_CREAT); /*创建一个与客户程序相同关键字的消息队列,但它的标志是0777与IPC_CREAT 做“或”操作的结果*/ printf(“server:pid=%d\n”, getpid()); /*输出服务端的进程ID*/for(;;) /*用无限循环完成下列语句*/{ msgrcv(msggid,&msg,256,1,0); /*接收来自客户进程或类型为1的消息 */ pint=(int*)msg.mtext; /*将客户端的消息正文传递给pint*/pid=*pint; /*将读出消息指针送pid,此时*pint中是客户进程的pid值*/printf(“server:receive from pid %d\n”,pid);msg.mtype=pid; /*已接受客户进程的pid为消息类型*/*pint=getpid(); /*以本进程pid作为消息构成消息传递内容*/msgsnd(msggid,&msg,sizeof(int),0); /*发送消息*/}}void cleanup(int signo){ msgctl(msggid , IPC_RMID , 0); /*删除消息队列*/exit(0);}如下图所示:client.cserver.c运行结果如下所示:2、思考题(1)单独执行client或server 有什么结果?(2)执行一个server程序,多次执行client有什么结果?(3)消息机制与管道通信的区别?在消息机制中,进程间的数据交换是以格式化的message为单位,程序员直接利用操作系统提供的一组通信命令,不仅能实现大量的数据传递,而且还是隐藏通信细节,是通信过程对用户透明,减少通信程序的复杂性。

西工大软件技术实验报告7ADO数据控件及其相关应用

西工大软件技术实验报告7ADO数据控件及其相关应用
软件技术实验报告
实验序号
实验7
名称
ADO数据控件及其相关应用
班级
学号
姓名
实验内容及完成情况:
实验内容:在窗体上放置已加载ADO控件及若干需绑定的控件如文本框等,分别设置ADO控件、绑定控件的相关属性,实现与数据库的连接。
使用数据窗体向导,构筑基于Student.mdb数据库的数据访问对话框。
完成情况:实验中能够根据要求成功的将数据库绑定在ADO控件上,并能实现数据连接,访问。
实验中所涉及的知识及技术:
实验中涉及到的知识和技术主要有:ADO数据控件的加载,属性设置与数据库的连接,DataGrid控件的使用,体会DataGrid控件的AllowAddNew、AllowDelete和AllowUpdate属性的作用,学会使用数据窗体向导自动构成数据访问窗体。
实验中的创新及功能扩充:
1、将各种功能的控件放在一个界面,利用界面切换实现不同的窗口,更加集中,便于操作。
2、将数据库设计的更加科学合理,使得处理的数据更加接近真实。体会出程序的科学性。
3、在控件的属性上下一些功夫了,比如设置控件背景颜色,透明度等。
4、窗体向导的建立让数据序运行如下:
实验中遇到的问题及解决方法:
1、问题:对实验时有关数据库的路径方面有不解的地方,好像尝试几次都不能正确运行。
解决方法:与同学交流,改变数据库的路径,从而实现正确运行。
2、问题:用“外接程序”菜单中的“数据窗体向导”做好数据库后,发现编译错误。
解决方法:绑定类型选的ADO控件,就应该先在窗体上画一个ADO控件,或者直接选择ADO代码。
本实验是又一个针对数据库操作的比较复杂的实验,实验过程中能够更加深入的体会VB对数据库操作的功能。另外深刻感觉到各种控件在VB中的巨大作用。同时跟老师和同学的讨论更加丰富而自己的知识面。

数据库实验报告全

数据库实验报告全

数据库实验报告全实验⼀实验⽬的1.熟悉SQL Server Management Studio(SSMS)的⼯作环境2.掌握使⽤和命令建⽴数据库的⽅法3.熟练掌握使⽤SSMS和T-SQL语句创建、修改和删除表。

4.熟练掌握使⽤SSMS和T-SQL语句插⼊、修改和删除表数据。

实验内容1.采⽤SQL Server Management Studio 、T-SQL语句两种⽅式创建产品销售数据库,要求:1)使⽤SSMS创建数据库CPXS_bak,数据⽂件初始⼤⼩为5MB,最⼤⼤⼩50MB,按5MB增长;⽇志⽂件初始为2MB,最⼤可增长到10MB,按2MB增长;其余参数取默认值。

2)⽤T-SQL语句创建数据库CPXS,数据⽂件的增长⽅式改为增长⽅式按10%⽐例增长,其余与CPXS_bak。

3)⽤T-SQL语句删除数据库CPXS_bak。

2.CPXS数据库包含如下三个表:1)产品(产品编号,产品名称,价格,库存量)2)客户(客户编号,客户名称,地区,负责⼈,电话)3)销售(产品编号,客户编号,销售⽇期,数量,销售额)三个表结构如资料中图3.1~图3.3所⽰,请写出创建以上三个表的T-SQL语句并在查询分析器中运⾏。

3.在SSMS中输⼊如资料中图3.4~图3.6的商品表、客户表和销售表的样本数据。

6.将CP表中每种商品的价格打8折。

7.将CP表中价格打9折后⼩于1500的商品删除。

⼆.实验步骤与结果(说明:要写出相关步骤和SQL语句,实验结果可以是运⾏画⾯的抓屏,抓屏图⽚要尽可能的⼩。

)1.1)使⽤SSMS创建数据库CPXS_bak效果图为2)⽤T-SQL语句创建数据库CPXS:CREATE DATABASE CPXSON PRIMARY(NAME='CPXS_DATA',FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\CPXS_DATA.MDF', SIZE=5MB,MAXSIZE=50MB,FILEGROWTH=10%)LOG ON(NAME='CPXS_LOG',FILENAME='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\CPXS_LOG.LDF', SIZE=2MB,MAXSIZE=10MB,FILEGROWTH=2MB)3) DROP DATABASE CPXS_bak刷新数据库会看到CPXS_bak不存在2.1) USE CPXSGOCREATE TABLE产品(产品编号char(6)PRIMARY KEY,产品名称char(30)NOT NULL,价格float(8),库存量int,)2) USE CPXSGOCREATE TABLE客户(客户编号char(6)PRIMARY KEY,客户名称char(30)NOT NULL,地区char(10),负责⼈char(8),电话char(12))3)USE CPXSGOCREATE TABLE销售(产品编号char(6),客户编号char(6),销售⽇期datetime,数量int NOT NULL,销售额float(8)NOT NULL,CONSTRAINT pk_js PRIMARY KEY(产品编号,客户编号,销售⽇期))/*pk_js为约束名*/ 执⾏完上⾯的操作就能看见表已经添加进数据库中,如图所⽰:3. 打开表:在其中添加数据:4.1)USE CPXSINSERT INTO产品(产品编号,产品名称,价格,库存量) VALUES('200001','柜式空调','3000','200')2)USE CPXSINSERT INTO产品(产品编号,产品名称,价格,库存量) VALUES('200002','微波炉','1000','100')3)USE CPXSINSERT INTO产品(产品编号,产品名称,价格,库存量) VALUES('200003','抽油烟机','1200','50')可以看见图中的产品表增加了如下内容:5.USE CPXSALTER TABLE产品Add产品简列varchar(50)6. USE CPXSUPDATE产品set价格=价格*0.87. USE CPXSDELETE产品WHERE价格*0.9<1500三.实验中的问题及⼼得(说明:此处应写明此次实验遇到的问题有哪些,如何解决的,不能够空。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

假设学校允许学生将银行卡和校园卡进行绑定,在student数据库中有如下的基本表,其中校园卡编号cardid即为学生的学号:icbc_card(studcardid,icbcid,balance) //校园卡ID,工行卡ID,银行卡余额 campus_card(studcardid,balance) //校园卡ID,校园卡余额创建数据库代码如下:use studentcreate table campus_card( studcardid Char(8),balance Decimal(10,2))create table icbc_card( studcardid Char(8),icbcid Char(10),lance Decimal(10,2),)示例数据如下:insert into campus_card values('20150031', 30)insert into campus_card values('20150032', 50)insert into campus_card values('20150033', 70)insert into icbc_card values('20150031','2015003101', 1000)insert into icbc_card values('20150032','2015003201', 1000)insert into icbc_card values('20150033','2015003301', 1000)针对以上数据库按照要求完成下列实验:1.编写一个事务处理(begin tran)实现如下的操作:某学号为20150032的学生要从银行卡中转账200元到校园卡中,若中间出现故障则进行rollback。

(15分)代码:use studentbegin transaction zhuanzhanggodeclare @x decimal(10, 2)select @x=balance from icbc_card where studcardid='20150032'set @x=@x-200if(@x>=0)beginupdate icbc_card set balance=@x where studcardid='20150032'update campus_card set balance=balance+200 where studcardid='20150032' commit tranendelsebeginprint'余额不足,不能转账'rollback tranend结果显示:2.针对本题的数据库和表,分别用具体的例子展现四种数据不一致问题:丢失修改、读脏数据、不可重复读和幻读(删除和插入)。

(40分,每种数据不一致10分)1).丢失修改:执行两段代码begin transactiondeclare @a decimal(10,2)select @a=balancefrom icbc_card where studcardid='20150032'waitfor delay '00:00:05'update icbc_cardset balance=@a+1 where studcardid='20150032'commitselect * from icbc_card-------------------------------------begin transactiondeclare @b decimal(10,2)select @b=balancefrom icbc_card where studcardid='20150032' waitfor delay '00:00:05'update icbc_cardset balance=@b+2 where studcardid='20150032' commitselect * from icbc_card两段代码执行后的结果:出现了丢失修改2).读脏数据:begin transactiondeclare @b decimal(10,2)select @b=balancefrom icbc_card where studcardid='20150032' update icbc_cardset balance=@b*2 where studcardid='20150032'begin transactionselect * from icbc_cardcommitrollbackselect * from icbc_card结果显示:3).不可重复读:begin transactionselect * from icbc_cardbegin transactiondeclare @b decimal(10,2)select @b=balancefrom icbc_card where studcardid='20150032' update icbc_cardset balance=@b*2 where studcardid='20150032' commitselect * from icbc_cardcommit结果显示:4).幻读删除:begin transactionselect *from icbc_cardbegin transactiondelete from icbc_cardwhere studcardid='20150032'commitselect *from icbc_cardcommit结果显示:插入:begin transactionselect *from icbc_cardbegin transactioninsert into icbc_card values('20150034', '2015003401', 1000) commitselect *from icbc_cardcommit结果显示:3.利用锁机制、数据库的隔离级别等,设计方案分别解决上述丢失修改、读脏数据和不可重复读(或者幻读)的数据不一致问题。

(30分,每种数据不一致10分,提示可以用sp_lock系统存储过程查看当前锁状况)1).丢失修改:begin transactiondeclare @b decimal(10,2)select @b=balancefrom icbc_card with (xlock)where studcardid='20150032'waitfor delay '00:00:05'update icbc_cardset balance=@b+2 where studcardid='20150032'commitselect * from icbc_cardbegin transactiondeclare @a decimal(10,2)select @a=balancefrom icbc_card with (xlock) where studcardid='20150032'waitfor delay '00:00:05'update icbc_cardset balance=@a+1 where studcardid='20150032'commitselect * from icbc_card成功加3,解决了丢失修改2).读脏数据begin tranupdate campus_card with(xlock)set balance=balance-20where studcardid='20150032'waitfor delay '00:00:05'rollbackbegin transet tran isolation level read uncommittedselect * from campus_card with (holdlock) where studcardid='20150032'waitfor delay'00:00:05'select * from campus_card with (holdlock) where studcardid='20150032'结果显示:没有出现脏数据3).不可重复读begin transet tran isolation level read uncommitteddeclare @b1 Decimal(10,2)declare @b2 Decimal(10,2)select @b1=balance from campus_card with (holdlock) where studcardid='20150032'print('第一次数据:'+convert(varchar,@b1))waitfor delay'00:00:05'select @b2=balance from campus_card with (holdlock) where studcardid='20150032'print('第一次数据:'+convert(varchar,@b2))begin tranupdate campus_card with(xlock)set balance=balance+100where studcardid='20150032'waitfor delay '00:00:03'commit结果显示:消除了重复读错误4.构造一个出现死锁的情形。

(10分)事务一:begin transactionselect * from campus_card with (tablockx)waitfor delay'00:00:05'select * from icbc_card with (tablockx)commit事务二:begin transactionselect * from icbc_card with (tablockx)waitfor delay'00:00:05'select * from campus_card with (tablockx)commit结果:出现了死锁5.利用dbcc log命令查看student数据库的事务日志。

相关文档
最新文档