精华内容
下载资源
问答
  • Sql Server 数据库实验报告

    千次阅读 多人点赞 2019-11-28 15:25:37
    数据库原理 实验报告 目录 实验一 SQL Server的安装和配置 4 一、实验目的 4 二、实验内容 4 三、实验步骤 4 四、实验代码和结果 4 五、实验总结与体会 4 实验二 创建数据库 5 一、实验目的 5 二、实验内容 5 三、...

    数据库原理 实验报告

    目录
    实验一 SQL Server的安装和配置 4
    一、实验目的 4
    二、实验内容 4
    三、实验步骤 4
    四、实验代码和结果 4
    五、实验总结与体会 4

    实验二 创建数据库 5
    一、实验目的 5
    二、实验内容 5
    三、实验步骤 5
    四、实验代码和结果 6
    五、实验总结与体会 6

    实验三 创建数据表 7
    一、实验目的 7
    二、实验内容 7
    三、实验步骤 7
    四、实验代码和结果 8
    五、实验总结与体会 9

    实验四 管理表数据 10
    一、实验目的 10
    二、实验内容 10
    三、实验步骤 10
    四、实验代码和结果 10
    五、实验总结与体会 13

    实验五 简单数据查询 14
    一、实验目的 14
    二、实验内容 14
    三、实验步骤 14
    四、实验代码和结果 14
    五、实验总结与体会 18

    实验六 高级数据查询 19
    一、实验目的 19
    二、实验内容 19
    三、实验步骤 19
    四、实验代码和结果 19
    五、实验总结与体会 20

    实验七 视图 21
    一、实验目的 21
    二、实验内容 21
    三、实验步骤 21
    四、实验代码和结果 21
    五、实验总结与体会 24

    实验八 索引 25
    一、实验目的 25
    二、实验内容 25
    三、实验步骤 25
    四、实验代码和结果 25
    五、实验总结与体会 26

    实验九 数据库维护 27
    一、实验目的 27
    二、实验内容 27
    三、实验步骤 27
    四、实验代码和结果 27
    五、实验总结与体会 27

    实验十 SQL程序设计 …28
    一,实验目的………………………………………………………………………………28
    二,实验内容………………………………………………………………………………28
    三,实验步骤………………………………………………………………………………28
    四,实验代码和结果………………………………………………………………………28
    五,实验总结和体会………………………………………………………………………29

    实验一 SQL Server的安装和配置

    一, 实验目的
    (1) 了解Microsoft SQL Server 2008系统。
    (2) 掌握SQL Server 2008的安装过程。
    (3)熟悉SQL Server Management Studio的工作环境。
    (4)掌握sQL Server 2008服务器注册与配置。

    二,实验内容
    (1) SQL Server 2008数据库管理系统安装。
    (2) SQL Server 2008 Management Studio 使用。
    (3) SQL Server 2008服务器配置。

    三,实验步骤
    (1)安装SQL Server 2008数据库管理系统。
    安装SQL Server 2008数据库管理系统,熟悉其安装过程。
    从微软官方下载SQL Server 2008 Enterprise Evaluation,将其安装到本地计算机,使本地计算机成为服务器和客户端工具,并采用Windows身份验证模式。
    SQL Server 2008的安装与其他Microsoft Windows系列产品类似。用户可根据向导提示,选择需要的选项一步一步地完成。安装过程中涉及的实例名、用户账户、身份验证模式、排序规则等关键内容需要我们根据安装界面的提示和实际的需要来进行设置。
    (2)启动SQL Server Management Studio.
    启动SQL Server Management Studio,熟悉其界面环境。
    在SQL Server以前的版本中主要有两个工具:图形化的管理工具(EnterpriseManager)和T-SQL编辑器(Query Analyzer)。 在SQL Server 2008 中,SQL ServerManagement Studio将Enterprise Manager和Query Analyzer两个工具结合在一一起,可以在对服务器进行图形化管理的同时编写T-SQL. SQL Server Management Sudio中的对象浏览器结合了Query Analyzer的对象浏览器和Enerpie Manager的服务器树形视图,可以浏览所有已注册的服务器。另外,对象浏览器还提供了类似与Query Analyzer的工作区,工作区中有类似语言解析器和显示统计图的功能。现在可以在编写查询和脚本的同时,在同一个工具下使用Wizards和属性页面处理对象。
    (3)注册服务器。
    服务器只有在注册后才能被纳人SQL Server Management Studio的管理范围。为了18 管理、配置和使用Microsoft SQL Server 2008 系统,必须使用Microsoft SQL Server
    Management Studio工具注册服务器。注册服务器就是为Microsoft SQL Server 客户机/服务器系统确定一台数据库所在的机器,该机器作为服务器,可以为客户端的各种请求提供服务。在SQL Server Management Studio中有一个单独可以同时处理多台服务器的注册服务器窗口,同时其不仅可以对服务器进行注册,还可以注册分析服务、报告服务、SQLServer综合服务以及移动SQL等。
    (4)配置SQL Server 2008。
    利用SQL Server 2008配置管理器,对数据库管理系统进行配置。
    启动SQL Server配置管理器,查看与SQL Server相关联的服务,并尝试启动和停止服务、配置SQL Server使用的网络协议以及从sQL Server客户端计算机管理网络连接配置。

    四,实验代码和结果

    五,实验总结和体会
    成功安装了SQL Server 2008,步骤不算复杂,但需要自己动手配置的地方很多,安装总体来说还算顺利。

    实验二 创建数据库

    一,实验目的
    (1)了解sQL Server 数据库的物理结构和逻辑结构。
    (2)掌握使用对象资源管理器创建和管理数据库。
    (3)掌握使用T-SQL语句创建和管理数据库。

    二,实验内容
    (1)利用对象资源管理器创建、修改和删除数据库。
    (2)利用T-SQL语句创建修改和删除数据库。

    三,实验步骤
    (1)启动sQL Server Management Studio,在对象资源管理器中,利用图形化的方法创
    建数据库student.
    (2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法修改数据库student,增加数据文件。
    其中:数据文件逻辑名student_ data2,操作系统文件的名称为C:\Program Files\Microsoft SQL Server\MSSQL10. MSSQLSERVER\ MSSQL\DATA\student_ data2. ndt,
    初始大小为50MB,最大为100MB,以30%的速度增长。
    (3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除数据库student。
    (4)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语何
    CREATE DATABASE命令创建数据库student.
    (5) 启动SQL Server Management Studio,在 SQL编辑器中,利用T-SQL语句ALTER DATABASE命令修改数据库student,增加日志文件。
    其中:日志文件逻辑名student_ log2,操作系统文件的名称为 C:\Program Files\Microsoft SQL Server\MSSQL10. MSSQLSERVER\MSSQL\DATA\student_ data2. ldf,初始大小为3MB,最大为50MB,以1M的速度增长。
    (6)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句DROPDATABASE命令删除数据库student。

    四,实验代码和结果
    –创建数据库student
    CREATE DATABASE student
    ON PRIMARY
    (
    NAME=student_data,
    FILENAME=‘E:\数据库\student_data.mdf’,
    SIZE=3,
    MAXSIZE= UNLIMITED,
    FILEGROWTH=1
    )
    LOG ON
    (
    NAME=student_log,
    FILENAME=‘E:\数据库\student_log.ldf’,
    SIZE= 1,
    MAXSIZE= 20,
    FILEGROWTH=10%
    )
    –修改数据库student,增加日志文件
    alter database student
    add log file
    (
    NAME=student_log2,
    FILENAME=‘E:\数据库\student_log2.ldf’,
    SIZE= 3,
    MAXSIZE= 50,
    FILEGROWTH=1
    )
    –删除数据库student
    drop database student

    五,实验总结和体会
    除了可以通过对象资源管理器的图形化界面创建数据库外,还可以使用T-SQL语言所提供的CREATE DATABASE语句来创建数据库。通过实验个人认为,后一种方法更加简单有效。

    实验三 创建数据表

    一,实验目的
    (1)了解SQL Server表的结构特点。
    (2)了解SQL Server 2008的基本数据类型。
    (3)掌握对象资源管理器创建和管理数据表。
    (4)掌握T-SQL语句创建和管理数据表。
    (5)理解约束的概念。

    二,实验内容
    (1)在对象资源管理器创建修改和删除数据表。
    (2)利用T-SQL语句创建、修改和删除数据表。
    (3)创建主键约束、缺省约束、check约束、唯一约束和外键约束。

    三,实验步骤
    (1)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法创建学生信息表stu_info、课程信息表course_info和学生成绩表stu_grade,其结构参考附录A。
    (2)启动SQL Server ManagementStudio,在对象资源管理器中,利用图形化的方法对数据表进行修改:
    *在数据表stu_info中,增加备注字段,字段名memo,字段类型nvarchar,字段长度
    200,允许为空。
    *在数据表stu_info中,删除备注字段memo。
    *在数据表course_info中,对于字段course_name设置UNIQUE约束。
    *在数据表stu_grade中,对于字段grade设置CHECK约束,其取值在0~100之间。
    *在数据表stu_grade中,对于字段stu_id设置FOREIGN KEY约束,其取值参考数据 表stu_info中stu_id 字段取值。
    (3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除数据表stu_grade.
    (4)启动SQL Server Management Studio,在 SQL编辑器中,利用T-SQL语句CREATE TABLE命令创建学生信息表stu_info、课程信息表course_info 和学生成绩表
    stu_grade,其结构参考附录A。
    (5)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句ALTER TABLE命令修改数据表:
    *在数据表stu_info中,增加身份证号码字段,字段名code,字段类型char,字段长度
    18,允许为空。
    *在数据表stu_info中,对于字段code设置UNIQUE约束。
    *在数据表stu_info中,删除身份证号码字段code.
    *在数据表stu_grade中,对于字段grade设置CHECK约束,其取值在0~100之间,
    *在数据表stu_grade中,对于字段course_id 设置FOREIGN KEY约束,其取值参 考数据表course_info中course_id字段取值。
    (6)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句DROP TABLE 命令删除数据表stu_info。

    四,实验代码和结果
    –创建数据表
    create table stu_info(
    stu_id char(10) not null constraint pk_stu_id primary key, --主键
    name nvarchar(20) not null,
    birthday date null,
    sex nchar(1) null default ‘男’,
    address nvarchar(20) null,
    mark int null,
    major nvarchar(20) null,
    sdept nvarchar(20) null,
    );
    GO
    CREATE TABLE course_info(
    course_id char(3) NOT NULL constraint pk_course_id primary key, --主键
    course_name nvarchar(20) NOT NULL,
    course_type nvarchar(20) NULL default ‘考试’,
    course_mark tinyint NULL,
    course_time tinyint NULL,
    pre_course_id char(3) NULL constraint fk_pre_course_id foreign key references course_info(course_id), --外键
    );
    GO
    CREATE TABLE stu_grade(
    stu_id char(10) not null CONSTRAINT fk_stu_id FOREIGN KEY REFERENCES stu_info(stu_id), --外键
    course_id char(3) not null CONSTRAINT fk_course_id FOREIGN KEY REFERENCES course_info(course_id), --外键
    grade tinyint null,
    );
    –stu_grade:stu_id与course_id合在一起作为主键
    GO
    ALTER TABLE stu_grade
    ADD CONSTRAINT pk_stu_course PRIMARY KEY(stu_id,course_id)
    –修改数据表
    GO
    ALTER TABLE stu_info
    ADD code char(18) NULL
    GO
    ALTER TABLE stu_info
    ADD CONSTRAINT un_code UNIQUE --UNIQUE约束:确保某个或某些列(非主键列)没有相同的列值
    GO
    ALTER TABLE stu_info
    DROP COLUMN code
    GO
    ALTER TABLE stu_grade
    ADD CONSTRAINT ck_grade CHECK(grade between 0 and 100) --CHECK约束:限制输入到一列或多 列的值的范围
    ----删除数据表
    –DROP TABLE stu_info

    五,实验总结和体会
    创建数据表的一般步骤为:首先定义表结构,即给表的每一列取列名,并确定每一列的数据类型、数据长度、列数据是否可以为空等;然后,为了限制某列数据的取值范围,以保证输入数据的正确性和一致性而设置约束;当表结构和约束建立完成之后,最后就可以向表中输入数据了。

    实验四 管理表数据

    一,实验目的
    (1)掌握在对象资源管理器中对数据表进行插人、修改和删除数据的操作。
    (2)掌握T-SQL语句对数据表进行插人、修改和删除数据的操作。

    二,实验内容
    (1)利用对象资源管理器向数据表中添加、修改和删除数据。
    (2)使用T-SQL语句向数据表中添加、修改和删除数据。

    三,实验步骤
    (1)启动SQL Sever Mangement Sudi,在对象资源管理器中,利用图形化的方法向学生信息表stu_info、课程信息表course. info和学生成绩表stu grade中添加数据,其数据
    内容参考附录B。
    (2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法对
    表数据进行修改:
    *在数据表stu_info中,将学号(stu_ id)为2007070101同学的籍贯address)改为“河
    南洛阳”。
    *在数据表stu_ grade中,将成绩(grade)小于60分的所有同学成绩增加10%。
    (3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除数据表stu_ grade中成绩(grade)小于60分的记录。
    (4) 启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句INSERT INTO命令向学生信息表stu_ info、 课程信息表course_ info 和学生成绩表stu_grade中添加数据,其数据内容参考附录B。
    (5)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句UPDATE命令修改表数据:
    *在数据表stu info 中,将学号(stu_ id) 为2007070102同学的院系(sdept)改为“会计 学院”。
    *在数据表stu grade中,将成绩(grade)小于60分的所有同学成绩置空。
    (6)启动sQL Server Management Studio,在SQL 编辑器中,利用T-SQL语句DELETE命令删除数据表stu info中所有性别(sex)为空的记录。

    四,实验代码和结果
    –添加表数据
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept)
    VALUES(‘2007070101’,‘张元’,‘男’,‘1985-10-09’,‘河南许昌’,576,‘计算机科学与技术’,‘信息学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept)
    VALUES(‘2007070102’,‘张红’,‘女’,‘1985-01-14’,‘河南开封’,565,‘计算机科学与技术’,‘信息学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
    VALUES(‘2007070103’,‘王明’,‘男’,‘1986-07-08’,‘河南洛阳’,570,‘计算机科学与技术’,‘信息学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
    VALUES(‘2007070104’,‘李伟’,‘男’,‘1986-03-11’,‘河南郑州’,564,‘计算机科学与技术’,‘信息学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
    VALUES(‘2007070201’,‘郑澜’,‘女’,‘1985-12-01’,‘河南平顶山’,567,‘电子商务’,‘信息学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
    VALUES(‘2007070202’,‘赵恒’,‘男’,‘1986-03-11’,‘河南周口’,566,‘电子商务’,‘信息学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
    VALUES(‘2007070203’,‘张兰’,‘女’,‘1986-03-11’,‘河南许昌’,571,‘电子商务’,‘信息学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
    VALUES(‘2007080101’,‘李伟’,‘男’,‘1986-03-11’,‘河南郑州’,578,‘会计学’,‘会计学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
    VALUES(‘2007080102’,‘钱丽’,‘女’,‘1986-03-11’,‘河南安阳’,573,‘会计学’,‘会计学院’)
    INSERT INTO stu_info(Stu_id,name,sex,birthday,address,mark,major,sdept )
    VALUES(‘2007080201’,‘孙楠’,‘男’,‘1986-1-19’,‘河南南阳’,578,‘财务管理’,‘会计学院’)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘701’,‘计算机基础’,‘考试’,3,50,NULL)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘702’,‘操作系统’,‘考试’,4,50,701)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘703’,‘计算机网络’,‘考试’,4,50,701)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘704’,‘数据库原理’,‘考察’,3,50,701)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘706’,‘Java’,‘考察’,3,40,704)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘801’,‘宏观经济学’,‘考试’,4,50,NULL)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘802’,‘初级会计’,‘考试’,4,50,NULL)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘803’,‘财政学’,‘考试’,3,50,NULL)
    INSERT INTO course_info(course_id,course_name,course_type,course_mark,course_time,pre_course_id)
    VALUES(‘804’,‘会计电算化’,‘考查’,3,NULL,NULL)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007070101’,‘701’,89)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007070101’,‘702’,81)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007070101’,‘703’,96)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007070102’,‘701’,85)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007070102’,‘702’,74)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007070102’,‘703’,77)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007070104’,‘701’,91)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007070104’,‘702’,88)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007080101’,‘801’,79)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007080101’,‘802’,91)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007080102’,‘801’,87)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007080102’,‘802’,83)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007080201’,‘803’,75)
    INSERT INTO stu_grade(stu_id,course_id,grade)
    VALUES(‘2007080201’,‘804’,82)
    –修改表数据
    GO
    UPDATE stu_info
    SET sdept='会计学院’WHERE Stu_id =‘2007070102’
    GO
    DELETE FROM stu_grade WHERE grade<‘60’
    –删除stu_info中所有性别(sex)为空的记录
    GO
    DELETE FROM stu_info WHERE sex=‘男’ and sex=‘女’

    五,实验总结和体会
    如果向表中所有列都要插入数据时,字段名表可以省略,但必须保证VALUES后的各数据项位置和类型与表结构的定义完全一致,使得输入的数据真实有效。
    在插人数据时,对于允许空值的列,可以使用用NUL插入空值;对于具有默认值的列,
    可以使用 DEFAULT插人默认值。
    INSERT INTO除了能够实现一次插入一条记录以外,也可以通过子查询实现一次插入多条记录。

    实验五 简单数据查询

    一,实验目的
    (1) 掌握SELECT语句的基本语法。
    (2)掌握数据汇总的方法。
    (3) 掌握SELECT语句的GROUP BY子句的作用和使用方法。
    (4)掌握SELECT语句的ORDER BY子句的作用和使用方法。

    二,实验内容
    (1) SELECT语句的基本使用。
    (2)数据汇总。
    (3) GROUP BY子句和ORDER BY、COMPUTEBY子句的使用。

    三,实验步骤
    针对student数据库中,stu_info数据表,course_info数据表和stu_grade数据表,完成下列查询。
    (1) SELECT基本使用
    查询每个同学的所有数据。
    查询每个同学的学号、姓名和院系。
    查询学号为2070同学的姓名、性别、籍贯和院系。
    查询每个女同学的学号,姓名和院系,并将结果中各列的标题指定为学号、姓名和
    院系。
    查询计算每个同学的年龄。
    查询所有其籍贯含有“阳”的同学的姓名、性别、籍贯。
    查询课程编号702,且成绩 在70~80之间的同学的学号。
    (2)数据汇总
    查询信息学院同学入学平均分。
    查询全体同学的入学最高分和最低分。
    查询会计学院同学总人数。
    查询学号为207070101同学的各门课程总分。
    (3) GROUP BY
    查询每个院系的总人数。
    查询每位同学的平均分。
    (4) ORDER BY
    将各位同学的信息按入学成绩由高到低排列输出。
    查询每个同学的学号、姓名、课程名和成绩信息,并按成绩由低到高排列输出。

    四,实验代码和结果
    –select 基本使用
    GO
    SELECT*
    FROM stu_info
    GO
    SELECT*
    FROM stu_grade
    GO
    SELECT*
    FROM course_info
    GO
    SELECT stu_id,name,sdept
    FROM stu_info
    GO
    SELECT name,sex,address,sdept
    FROM stu_info
    WHERE stu_id=‘2007070103’
    GO
    SELECT stu_id AS’学号’,name AS’姓名’,sdept AS’院系’
    FROM stu_info
    WHERE sex=‘女’
    GO
    SELECT birthday
    FROM stu_info
    GO
    SELECT name,sex,address
    FROM stu_info
    WHERE address like ‘%阳%’
    GO
    SELECT grade
    FROM stu_grade
    WHERE course_id=702 and grade between 70 and 80
    –数据汇总
    GO
    SELECT AVG(mark)as’平均分’
    FROM stu_info
    WHERE sdept=‘信息学院’
    GO
    SELECT MAX(mark)as’最高分’,MIN(mark)as’最低分’
    FROM stu_info
    GO
    SELECT COUNT()as’会计学院总人数’
    FROM stu_info
    WHERE sdept=‘会计学院’
    GO
    SELECT sum(grade)
    FROM stu_grade
    WHERE Stu_id=2007070101
    –GROUP BY
    GO
    SELECT sdept,COUNT(
    )as’总人数’
    from stu_info
    group by sdept
    GO
    SELECT stu_id,AVG(grade)as’平均分’,COUNT()as’课程数’
    from stu_grade
    group by stu_id
    –ORDER BY
    GO
    SELECT

    FROM stu_info
    order by mark desc --desc:降序排列
    GO
    SELECT stu_info.stu_id,name,course_name,grade
    FROM stu_info,course_info,stu_grade
    WHERE stu_info.Stu_id=stu_grade.Stu_id and stu_grade.course_id =course_info.course_id
    order by grade asc --asc:升序(默认)

    五,实验总结和体会
    实验时要注意查询要求的详细描述,先确定要查询的表然后确定要输出的列和行,如果没有指定输出列,默认为输出所有列。
    在数据查询时,经常需要对表中的列进行计算,才能获得所需要的结果。在SELECT
    子句中可以使用各种运算符和函数对指定列进行运算
    在SQL语言中, ORDER BY子句用于排序。 ORDER BY子句总是在 WHERE子句(如果有的话)后面说明的,可以包含一个或多个列,每个列之间以逗号分隔,可以选择使用ASC/ DESC关键字指定按照升序降序排序。如果没有特别说明値長以升序序列进行排序的。如用于多列进行排序,各列在 ORDER BY子句中的顺序决定了排序过程中的优先级。
    使用 GROUP BY子包为每一个组产生一个汇总结果,每个组只返回一行,不返回详细信息。SELECT子句句中指定的列必须是 GROUP BY子句中指定的列,或是和聚合函数起使用。如果包含 WHERE子句,则只对满足 WHERE条件的行进行分组汇总。如果 GROUP BY子句使用关键字ALL,则 WHERE子句将不起作用。

    实验六 高级数据查询

    一,实验目的
    (1)掌握嵌套查询、连接查询的表示。

    二,实验内容
    (1) 嵌套查询的使用。
    (2) 连接查询的使用。

    三,实验步骤
    针对student数据库中,stu_info数据表,course_info数据表和stu_grade数据表,完成下列查询。
    (1)嵌套查询
    查询选修702课程的同学的学号、姓名和院系信息。
    查询没有选修702课程的同学的学号、姓名和院系信息。
    查询比会计学院的同学人学分数都高的同学的学号、姓名、专业和院系信息。
    (2)连接查询
    查询每个同学的学号、姓名、课程名和成绩信息。
    查询人学成绩大于575分的同学姓名和其选课情况(包括课程名称、课程学时和成绩)。

    四,实验代码和结果
    –嵌套查询
    GO
    SELECT stu_id,name,sdept
    FROM stu_info
    WHERE stu_id IN (
    SELECT stu_id
    FROM stu_grade
    WHERE course_id=702
    )
    GO
    SELECT stu_id,name,sdept
    FROM stu_info
    WHERE stu_id not IN (
    SELECT stu_id
    FROM stu_grade
    WHERE course_id=702
    )
    GO
    SELECT stu_id,name,major,sdept
    FROM stu_info
    WHERE mark>ALL
    (SELECT mark
    FROM stu_info
    WHERE sdept=‘会计学院’)
    AND sdept<>‘会计学院’
    –连接查询
    GO
    SELECT stu_info.Stu_id,name,course_name,grade
    FROM stu_info
    left outer join stu_grade on stu_info.Stu_id=stu_grade.Stu_id
    left outer join course_info on stu_grade.course_id=course_info.course_id
    GO
    SELECT name,course_name,course_time,grade
    FROM stu_info,course_info,stu_grade
    WHERE stu_info.Stu_id=stu_grade.Stu_id and stu_grade.course_id =course_info.course_id and mark>575

    五,实验总结和体会
    表的连接的实现可以通过两种方法:利用 SELECT语句的 WHERE子句。在FROM子句中使用JOIN关键字。由于连接是涉及多个表及其之间的引用,所以列的引用必须明确指出,对于重复的列名必须用表名限定,即 Table_name. Column_name的完整表达方式。
    所谓嵌套查询指的是在一个SELECT査询语句中包含另一个(或多个)SELECT查询语句。其中,外层的SELECT查询语句叫外部查询,内层的的SELECT査询语句叫子查询。使用子查询时需注意以下几个问题:子查询可以嵌套多层。子查询需用圆括号括起来。子查询中不能使用COMPUTE[BY]和INTO子句。子查询的SELECT语句中不能使用 Image、text或 ntext数据类型。

    实验七 视图

    一,实验目的
    (1)理解视图的重要性。
    (2)掌握在对象资源管理器中创建和管理视图。
    (3)掌握T-SQL语句创建和管理视图。

    二,实验内容
    (1)在对象资源管理器创建、修改和删除视图。
    (2)在对象资源管理器使用视图。
    (3)利用T-SQL语句创建、修改和删除视图。
    (4)利用T-SQL语句使用视图。

    三,实验步骤
    (1)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法创建下列视图:
    视图view_male,包含学生信息表中所有男生信息。
    视图view_ stu_grade,包含每个同学的学号、姓名、课程名和成绩信息。
    视图view_ avg, 包含每个同学的学号、姓名、平均成绩信息。
    (2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法对视图v_ male进行修改,只显示信息学院所有男生的信息。
    (3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除视图view_ male.
    (4)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法查询视图view_ male 中的记录信息。
    (5)启动SQL Server Management Studio,在 SQL编辑器中,利用T-SQL语句CREATE VIEW命令创建下列视图:
    视图view. female, 包含学生信息表中所有女生信息。
    视图view. count,包含每个院系的名称和学生人数信息。
    视图view sum,包含每个同学的学号、姓名、课程总成绩信息。
    (6)启动SQL Server Management Studio在SQL编辑器中,利用TSQL语句ALTER VIEW命令修改视图view _female,增加加密性。
    (7)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句DROP
    VIEW命令删除视图view_female.
    (8)启动SQL Server Management Studio,在SQL编辑器中通过视图,利用T-SQL语句查询下列信息:
    查询“信息学院”的学生人数。
    查询学号2007070101同学的所选课程和课程成绩信息。

    四,实验代码和结果
    –创建视图
    create view view_female
    with encryption --加密
    as
    select*
    from stu_info
    where sex=‘女’
    go
    create view view_count(sdept,count)
    as
    select sdept,count() as’学生人数’
    from stu_info
    group by sdept
    go
    create view view_sum(学号,姓名,总成绩)
    as
    select stu_info.stu_id,stu_info.name,sum(grade)
    from stu_info left outer join stu_grade
    on stu_info.stu_id=stu_grade.stu_id
    group by stu_info.stu_id,name
    go
    create view view_stu_grade
    as
    select stu_info.stu_id,name,course_name,grade
    from stu_info
    left outer join stu_grade on stu_info.Stu_id=stu_grade.Stu_id
    left outer join course_info on stu_grade.course_id=course_info.course_id
    ----删除视图
    –go
    –drop view view_female
    –查询信息
    go
    select count(
    ) as’学生人数’
    from view_female
    where sdept=‘信息学院’
    go
    select*
    from view_stu_grade
    where stu_id=‘2007070101’

    五,实验总结和体会
    视图的定义和属性信息都保存在系统数据库和系统数据表中,可以通过系统提供的存
    储过程来获取有关视图的定义信息。sp help用于返回视图的特征信息。sp_ helptext查看视图的定义文本。sp_ depends查看视图对表的依赖关系和引用的字段。
    通过本次实验,我练习了在对象资源管理器中创建、修改、删除和使用视图,以及利用T-SQL语句创建、修改、删除和使用视图,理解了视图的重要性,掌握了在对象资源管理器中和利用T-SQL语句创建和管理视图。

    实验八 索引

    一,实验目的
    (1)理解索引的概念和分类。
    (2)掌握在对象资源管理器中创建和管理索引。
    (3)掌握T-SQL语句创建和管理索引。

    二,实验内容
    (1)在对象资源管理器创建、修改和删除索引。
    (2)在对象资源管理器使用索引。
    (3)利用T-SQL语句创建、修改和删除索引。(4)利用T-SQL语句使用索引。

    三,实验步骤
    (1)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法创建下列索引:
    *对学生信息表stu_info的name列创建非聚集索引idx_name。
    *对学生成绩表stu_ info 的stu_ id .course_ id列创建复合索引idx stu course_ id
    (2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法对索引idx_ name进行修改,使其成为唯一索引。
    (3)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法删除索引idx_ stu_ course_ id。
    (4)启动SQL Server Management Studio,在 SQL编辑器中,利用T-SQL语句CREATE INDEX命令创建下列索引:
    *对课程信息表course_info的course_name列创建非聚集索引idx_course _name。
    *对学生成绩表stu_grade的stu_id、course_id列创建复合索引idx_stu course id。
    (5)启动SQL Server Management Studio,在sQL编辑器中,利用T-SQL语句对索引
    idx
    course_name进行修改,使其成为唯索引。
    (6)启动SQL Server Management Studio,在SQL编辑器中,利用系统存储过程sp_helpindex查看索引idx course _name信息。
    (7)启动SQL Server Management Sudio,在sQL编辑器中,利用T-SQL语句DROPINDEX命令删除索引idx course _name.

    四,实验代码和结果
    –创建索引
    CREATE UNIQUE NONCLUSTERED INDEX idx_course_name --唯一非聚集
    ON course_info(course_name)
    GO
    CREATE INDEX idx_stu_course_id
    ON stu_grade(stu_id,course_id)
    –查看
    GO
    Exec sp_helpindex course_info
    –删除
    GO
    DROP INDEX course_info.idx_course_name

    五,实验总结和体会
    在 SQL Server2008中,提供了多种索引类型。如果以存储结构来区分,则有“聚集索
    引”( Clustered Index,也称聚类索引、簇集索引)和“非非聚集索引”( Nonclustered Index,也称非聚类索引、非簇集索引)的的区别;如果以数据的唯一性来区别,则有“唯一索引”( Unique Ihdex)和“非唯一索引”( Nonunique Index)的不同;若以键列的个数来区分,则有“单列索引”与“多列索引”的分别。
    利用系统提供的存储过程sp_ rename可以对索引进行重命名。
    利用系统提供的存储过程sp_ helpindex可以查看索引信息,其语法格式如下:
    sp_helpindex [@objname =]’object_name’,其中,[@objname =]’object_name’表示所要查看的当前数据库中表的名称。

    实验九 数据库维护

    一,实验目的
    (1)理解备份与恢复的意义。
    (2)掌握在对象资源管理器中备份和恢复数据库。
    (3)掌握T-SQL语句备份和恢复数据库。

    二,实验内容
    (1)在对象资源管理器中备份和恢复数据库。
    (2)利用T-SQL语句备份和恢复数据库。

    三,实验步骤
    (1)启动SQL Server Management Studio, 在对象资源管理器中,利用图形化的方法对数据库student进行完整备份。
    (2)启动SQL Server Management Studio,在对象资源管理器中,利用图形化的方法,针对(1)中的完整备份,对数据库student进行恢复。
    (3)启动SQL Server Management Studio,在SQL编辑器中,利用T-SQL语句BACKUP命令对数据库student进行完整备份。
    (4)启动SQL Server Management Studio,在 sQL编辑器中,利用T-SQL语句
    RESTORE命令,针对()中的完整备份对数据库sudent 进行恢复。

    四,实验代码和结果
    –完整备份
    Backup Database student
    To Disk=‘E:\数据库\备份\student.bak’

    –恢复
    Restore Database student
    From Disk=‘E:\数据库\备份\student.bak’

    五,实验总结和体会
    数据库的备份和恢复是数据库管理员维护数据库安全性和完整性必不可少的操作,合
    理地进行备份和恢复可以将可预见的和不可预见的问题对数据库造成的伤害降到最低。当
    运行 SQL Server的服务器出现故障,或数据库遭到某种程度的破坏时,可以利用以前对数
    据库所做的备份重建或恢复数据库。
    通过这次实验,掌握了数据库备份的概念和种类,各种数据库备份的实现方法,数据库恢复模型以及从各种数据库备份中恢复数据库的方法。

    实验十 SQL程序设计

    一、实验目的
    1.熟练掌握变量的定义和赋值。
    2.掌握各种运算符。
    3.掌握流程控制语句,尤其是条件语句和循环预语句。

    二、实验内容
    1.全局变量和局部变量的定义与使用。
    2.流程控制语句的使用。

    三、实验步骤
    1.创建一名为Student_name的局部变量,并在select语句中使用该变量查找“张元”同学所选课程的成绩情况,给出相应的语句段和运行结果。
    2.将选修课程号为701的同学的成绩增加3分,同时使用全局变量@@rowcount检查获得更新的数据行数目。
    3.利用学生数据库student中的stu_grade表查找学生的成绩信息并判断是否有某学生的某门课程的成绩在90分以上的信息,若有,则显示学号、姓名、课程名和成绩,否则输出信息,说明“不存在成绩大于90分的学生!”
    4.从学生数据库student中查询所有学生选课成绩情况:姓名、课程名、成绩。要求:将学生的百分制转换为5级评分制,成绩大于等于90显示为“优秀”,成绩在80-89分显示为“良好”,“70-79”分显示为“中等”,成绩在60-69显示为“及格”,60以下显示为“不及格”,没成绩的显示为“未考”。

    四,实验代码和结果
    Declare @Student_name varchar(20)
    Set @Student_name=‘张元’
    SELECT grade
    From stu_grade,stu_info
    WHERE stu_grade.stu_id=stu_info.stu_id AND name=‘张元’
    GO
    UPDATE stu_grade
    Set grade=grade+3
    WHERE course_id=‘701’
    if @@rowcount=0
    print’警告:没有发生更新数据行!’
    else
    print @@rowcount
    GO
    if Exists(SELECT * From stu_grade where grade>90)
    SELECT stu_info.stu_id,name,course_name,grade
    From stu_grade,stu_info,course_info
    WHERE stu_grade.stu_id=stu_info.stu_id AND stu_grade.course_id=course_info.course_id AND grade>90
    else
    print’不存在成绩大于90分的学生!’
    GO
    SELECT name,course_name,grade=
    case
    When grade>=90 then’优秀’
    When grade>=80 then’良好’
    When grade>=70 then’中等’
    When grade>=60 then’及格’
    When grade>0 then’不及格’
    else ‘未考’
    END
    FROM stu_info,stu_grade,course_info
    WHERE stu_info.stu_id=stu_grade.stu_id AND stu_grade.course_id=course_info.course_id

    五,实验总结和体会
    通过这次实验的学习,掌握以下内容:常量的使用,变量的定义和和赋值,各种运算符的使用与表达式的用法以及流程控制语句的使用。

    展开全文
  • sql server实用教程(第二版),这里有课后的实验分析报告
  • 数据库实验报告,里面包含三个实验:sql语句的基本使用;用户管理、触发器和存储过程;数据库与delphi连接编程。在实验报告中,我总结了实验中遇到的一些问题,用红色字体注明了,希望这个报告对新手们有些帮助,...
  • 这是大三第一学期《数据库基础》的实验报告,总共15个实验,前12个百度文库都有,后面三个网上找不到都是我自己花了很多时间琢磨出来的,希望对大家,以及将来的我有所帮助! 实验13用户管理及权限管理点我查看 ...

        这是大三第一学期《数据库基础》的实验报告,总共15个实验,前12个百度文库都有,后面三个网上找不到都是我自己花了很多时间琢磨出来的,希望对大家,以及将来的我有所帮助!

    了解四种异常事务状态(分别是脏读、不可重复读、丢失更新、死锁),理解发生异常事务状态的原理,以及我们要则么通过增加事务隔离级别来封锁,实现并发控制。当然随着事务隔离级别提升,所消耗的资源也变多,所以要根据实际情况选择隔离级别,也要预防死锁现象的发生。

    当然sql server 2012版本自带预防机制,所以导致部分实验没法做,重点是理解异常产生的原理,以及如何防止异常的发生。


    全部总结链接

    SQL基础   (数据库、表、数据的增删改查、视图相关,以及所有实验报告源代码)

    游标 (类似C++ 的 指针)

    存储过程(类似 C++ 的自定义函数)

    触发器 (类似 自定义的陷阱,或者说是监听器,满足某个条件了执行某个方法)

    用户权限及权限管理 (类似Windows的多用户管理)

    并发控制 (了解多个用户同时对数据造成错误的情况 和 解决方法)

    数据恢复(当数据库数据丢失,相应的解决方法)

     


    课程名称   数据库基础            

    实验项目   实验14 并发控制       


    实验要求:

    1. 独立完成本实验,以多个用户身份登录,创建管理多个事务。
    2. 设计一组操作产生“脏”读问题,然后通过封锁避免“脏”读问题。
    3. 设计一组操作产生不可重复读问题,然后通过封锁避免不可重复读问题。
    4. 设计一组操作产生丢失更新问题,然后通过封锁避免丢失更新问题。
    5. 设计一组产生死锁的操作,再利用相同顺序法有效的避免死锁。
    6. 在实验报告中要给出具体的操作步骤和过程,并针对各种情况做出具体的分析和讨论,很好的体会事务的性质和并发控制的作用。

    实验过程

    第一题:设计一组操作产生“脏”读问题,然后通过封锁避免“脏”读问题。

    1.1概念:我个人觉得脏读就是A事务读到了B事务未提交的数据。(A事务修改数据1后,B事务读取了当前的数据1,然后A因为某种错误回档,导致B事务读取的数据错误)。通俗来说就是A事务放了B事务的鸽子。

    1.2整体思路:

    先运行一个事务A (  1.修改课程学时数据为8 ; 2.等待20秒 ; 3.回滚数据,学时还原为6 ),在事务A的第二步等待的时候,运行事务B (  1.查询学时; 2. 等待20秒; 3. 查询学时)。其中事务B第一次查询是事务A中间的等待期,所以学时为8,第二次查询在事务A结束后,所以学时为6.

    1.3 代码截图:

    首先我们在第一个查询页面运行以下代码:

    图 1  查询窗口1  先更新学时为‘8 ’ 后回滚

    代码解析:

    以上第一行代码为:事务zwz1的开始标志

    第二行代码:更新课程表中课程编号为1128的学时为8

    第三行代码:等待20秒延迟

    第四行代码:回滚第二行代码,恢复到该事务未执行的状态

    第五行代码:查询课程表中课程编号为1128的所有信息

     

    接下来在查询窗口2,执行以下代码:

    图 2  查询窗口2  分别在事务A 等待期 和 结束后 查询学时

     

    代码解析:

    以上第一行代码为:在无锁的情况下查询课程表中课程编号为1128的所有信息(为错误信息)

    第二行代码:等待20秒的时间

    第三行代码:再次查询,发现数据不一致(本次为正确信息)

     

    接下来是加封锁的情况:

    图 3  加了写读锁后(不加也一样),窗口1回滚后 学时还是6 不变

     

    注:和前面不加封锁对比,多了第一行代码,即加上一个“写读锁”,个人理解为“当事务A想读取某数据,必须要等当前其他事务修改完,才能读

     

    图 4  加了写读锁之后 事务B等事务A全部执行完毕后再执行 所以结果都是6

     

    注:窗口二和前面不加封锁相比,也是多了第一行代码,运行的时候能明显感觉到运行了40秒,即等窗口1执行完毕后再执行窗口2的事务。


    第二题:设计一组操作产生不可重复读问题,然后通过封锁避免不可重复读问题。

    2.1 概念:事务A读某数据后,事务B将其修改,然后事务A再次读数据和之前的不一样。通俗理解为被调包。

    2.2 总体思路:事务A读取1128号课程数据后,等待5秒,然后事务A再次读取该课程数据。其中事务B利用事务A的等待期,对该课程数据进行修改。

    2.3代码截图:

    图 5 事务A三部曲:读取数据 ;等待期 ; 读取数据 。发现数据不一致

     

    图 6  事务B 在事务A等待期内 对数据进行修改

    解决方案:设置隔离级别 :repeatable read(可重复读)  书本179页

    思路:在原有基础上 增加封锁

    图 7 事务A执行过程中 事务B无法插入 所以前后查询结果一致

     

    图 8  事务B只能在事务A执行完毕后再执行 修改成功

     

    图 9  事务B执行后 学时数据被修改


    第三题:设计一组操作产生丢失更新问题,然后通过封锁避免丢失更新问题。

     

    3.1概念:丢失更新我个人理解为事务A和事务B同时对该数据进行修改,假设事务A执行时间短,事务B执行时间长,那么事务B会覆盖事务A的修改结果。(换一种方式的放鸽子)

    但是在SQL Server 2012中,不管是同一用户还是不同用户,都自带锁,即都是在先执行的事务执行完毕后,再执行另一个事务。

     

    3.2总体思路 :

    事务A先对学时数据查询(原先为6)再对学时进行修改(修改为8)最后5秒等待期再次查询(结果为8)

    事务B在事务A的等待期内开始执行(结果是等事务A结束再执行的),也先对学时数据查询(原先为6)再对学时进行修改(修改为10)最后5秒等待期再次查询(结果为10)

    结果为事务B覆盖了事务A的更新,可我觉得这只是因为事务B比事务A晚执行的原因

    3.3 代码截图:

    图 10 刚开始 学时数据为 6

     

    先执行事务A,紧接着执行事务B(相当于在事务A的等待期内执行)

    图 11 可以视为 同时执行事务A和事务B

     

    观察事务A 、事务B的执行结果:

    图 12 事务A执行前数据为6  执行后数据为8

     

    图 13 事务B执行前数据为8  执行后数据为10 说明和事务A互不干扰

    这时候我们可以发现,事务B在事务A全部完成之后再执行,对事务A互不干扰 ,最后查看数据库中的数据为10.

    图 14 数据库 课程表中的数据


    第四题:设计一组产生死锁的操作,再利用相同顺序法有效的避免死锁。

     

    4.1 概念 :就是你等我,我等你,导致互相一直等下去,卡死循环

    4.2整体思路:

    同样 sql server 2012也自带对死锁的预防,实验如下:

    我先执行查询1(操作1,等待5秒,操作2),然后马上执行查询2(操作2,等待5秒,操作1),因为执行中间有五秒等待时间,查询1的第二个更新等待查询2执行完毕,查询2的第二个更新等待查询1执行完毕,构成死锁。

    不过大概10秒钟之后,sql server 2012自动解开了死锁,即查询2做出让步,查询1全部执行。( &^^^& 太智能了)

     

    4.3代码截图:

    图 15 事务A被事务B让步 成功执行

     

    图 16  事务B为了让步事务A,成为牺牲品,后半段执行失败

     

    然后使用相同顺序法调换顺序之后:

    图 17  事务A正常执行

     

    图 18 事务B正常执行

    即没有死循环,正常运行。

    展开全文
  • 这是大三第一学期《数据库基础》的实验报告,总共15个实验,前12个百度文库都有,后面三个网上找不到都是我自己花了很多时间琢磨出来的,希望对大家,以及将来的我有所帮助! 实验13用户管理及权限管理点我查看 ...

    数据恢复是对数据库进行备份和还原,当数据库因为各种原因被损坏或者无法读取的时候,会造成无法估量的后果,这个时候就需要数据库还原工具,进行还原。

    数据库故障分为“软故障”和“硬故障”两种,“软故障”是因为断电导致软件方面的故障,“硬故障”是因为物理硬件坏了,导致数据库破损。相当于电脑的操作系统故障和物理设备的故障。

    数据库恢复分为完全备份和增量备份,完整备份效果最好,但是比较消耗时间;增量的备份保存的是对数据库的操作,在完整备份的基础上,使用增量备份也可以达到还原要求,但是增量备份时间消耗比较少,所以在选择数据库还原策略的时候,因为根据实际情况选择完全备份和增量备份。


    全部总结链接

    SQL基础   (数据库、表、数据的增删改查、视图相关,以及所有实验报告源代码)

    游标 (类似C++ 的 指针)

    存储过程(类似 C++ 的自定义函数)

    触发器 (类似 自定义的陷阱,或者说是监听器,满足某个条件了执行某个方法)

    用户权限及权限管理 (类似Windows的多用户管理)

    并发控制 (了解多个用户同时对数据造成错误的情况 和 解决方法)

    数据恢复(当数据库数据丢失,相应的解决方法)

     

    课程名称   数据库基础            

    实验项目   实验15 数据恢复       


    实验要求:

    (1)软故障后的恢复

         参照例题中的程序设计事务及事务处理的程序;

         模拟软故障的情形,使设计的事务及事务处理程序的各个分支都可以执行到;

         体会事务的原子性和一致性。

    (2)硬故障后的恢复

         针对一个具体的数据库设计一个备份恢复策略;

         做数据库全备份和若干增量备份(每次备份后都有一些数据操作);

         模拟一个硬故障(假设数据库损坏);

         备份当前日志;

         恢复数据库。

    (3)在实验报告中要给出具体的操作步骤和过程,并针对各种情况做出具体的分析和讨论。


    实验过程

     

    首先是概念问题。数据库恢复是建立在数据库故障之上的。数据库故障分为软故障和硬故障,软故障指的是突然停电、应用程序被强制结束的情况下,数据库的数据丢失或者损坏。硬故障指的是保存数据库的物理介质坏了,造成数据的遗失或者无法读取。

    总体思路:

    第一题:然而机房的电脑自带重启还原,无法实现断电重启的条件,我让一个事务(若干修改指令中间加了一个等待指令,以便我使用任务管理器强制关闭sql server),因为事务的原子性,虽然等待指令前的修改指令已经被执行,但是因为事务未完全执行完毕,所以被还原恢复。

    第二题:题目给出了条件是“假设数据库损坏”,我先把数据库完整备份,然后把数据库脱机,最后把数据库恢复。

    代码截图:

    第一题:软故障后的恢复

    图 1 首先看到原始的 学时 数据为6

    图 2  设计一个事务 内有若干更新操作 中间加一个等待期

    图 3   在等待期内 使用任务管理器 强制结束

     

     

    图 4   再次登入数据库  查看学时数据  还是为6,说明事务完全没有执行

     

    第二题:硬故障后的恢复

    图 5  首先对‘学生管理系统‘进行完整备份

    图 6 然后模拟 硬故障 删除该数据库

     

    图 7  接着还原数据库 覆盖还原

    图 8   接着打开还原的数据库 发现数据和原先一致

    展开全文
  • 这是大三第一学期《数据库基础》的实验报告,总共15个实验,前12个百度文库都有,后面三个网上找不到都是我自己花了很多时间琢磨出来的,希望对大家,以及将来的我有所帮助! 实验13用户管理及权限管理 本文 ...

    这是大三第一学期《数据库基础》的实验报告,总共15个实验,前12个百度文库都有,后面三个网上找不到都是我自己花了很多时间琢磨出来的,希望对大家,以及将来的我有所帮助!

    主要是概念问题,先是进入数据库所必须的登入用户,然后每个登入用户必须要有其下的数据库用户,每个数据库用户必须要有权限,权限具体内容由服务器角色提供。权限具体内容可以使用系统自带的服务器角色,也可以自定义。

    思路很绕,大概有点理解,就是那种层次结构的感觉。


    全部总结链接

    SQL基础   (数据库、表、数据的增删改查、视图相关,以及所有实验报告源代码)

    游标 (类似C++ 的 指针)

    存储过程(类似 C++ 的自定义函数)

    触发器 (类似 自定义的陷阱,或者说是监听器,满足某个条件了执行某个方法)

    用户权限及权限管理 (类似Windows的多用户管理)

    并发控制 (了解多个用户同时对数据造成错误的情况 和 解决方法)

    数据恢复(当数据库数据丢失,相应的解决方法)

     


    课程名称   数据库基础            

    实验项目   实验13 用户管理及权限管理       

     

    实验要求

    (1)以系统管理员身份完成如下实验。

    •  建立3个不同名称的注册用户.
    • 使用ALTER LOGIN命令对建立的注册用户用不同的修改.
    • 建立一个数据为管理员用户

    (2)以数据为管理员身份完成如下实验。

    • 根据已有的注册用户建立几个当前数据库的用户。
    • 使用ALTER USER命令修改部分用户设置。
    • 建立若干角色,部分角色指定基他用户管理。
    • 授权一些用户可以创建表等数据库对象。
    • 完成角色管理及其他授权管理

    (3)以下实验由若干学生一组共同完成。

    • 每个用户有建立对像的权限,各自建立自已的对象(如表和视图等)。
    • 各用户之间就表或视图的查询、修改、删除、插入等互相授权,在授权过程中体会GRANT命令中WITH GRANT OPTIN短语的作用。
    • 分情况收回授权,并体会REVOKE命令中GRANT OPTION FOR 和CASCADE短语的作用

    (4)在实验报告中要给出具体的操作要求和过程,并针对各种情况做出具体的分析和讨论。


    实验过程

    关于用户权限的概念性问题和相关SQL代码研究了好久,总共尝试了三遍,每次做都有新的理解,下面为最后一次的理解:

    最重要的就是概念性问题,首先对其中的概念总结一下:

     

    登入用户在SQL server 2012启动的时候需要登入的用户,登入用户必须要用数据库用户,否则无法登入。如下图所示:

    服务器角色书本154页,相当于java中“类”的概念。可以使用系统预定义的,也可以自己创建自定义权限的角色。

    数据库角色书本155页,相当于java中“对象”的概念。当一个数据库角色和服务器角色“连接”起来,那么这个数据库角色就含有该服务器角色所拥有的权限。

     

    需要用到的函数:

    sp_addrole函数在书本156页,用来创建新数据库角色,参数前者为数据库角色名称,后者为只读权限

    sp_addrolemember函数在书本157页,用来连接数据库角色和数据库用户

     

    题目1.1:建立3个不同名称的注册用户

    图 1 创建三个用户,属性包括 用户名密码 以及默认登入的数据库

    这个时候创建的这三个用户,还无法登入,因为还没有打开“学生管理系统”数据库的权限,如果登入则显示:

     

    题目1.2:使用ALTER LOGIN命令对建立的注册用户用不同的修改

    图 2 分别修改三个用户的 用户名 和 密码

    注:此题主要展示一下修改用户名和密码的语法,实际上没有修改,对后面过程没有影响

     

    题目1.3:建立一个数据为管理员用户

    图 3 把zwz01用户设置为sysadmin(书本154页)管理员,可以做任何事情

    但是这个管理员用户下面没有数据库用户,还是不能登入:

     

    题目2.1:根据已有的注册用户建立几个当前数据库的用户。

     

    图 4  分别创建 两个 数据库用户
    其中sp_addrole函数在书本156页,用来创建新数据库角色,参数前者为数据库角色名称,后者为只读权限
    代码相当于使用系统的“只读”类,创建两个java对象,分别是zwz01和zwz02
    这个zwz01和zwz02和登入用户的zwz01无关,这里重名了,以后有机会再改

     

    题目2.2:使用ALTER USER命令修改部分用户设置

    图 5   分别修改 两个用户 的 用户名
    注:只是展示语法,实际上没有修改,对后面过程无影响

     

     

    题目2.3:建立若干角色,部分角色指定基他用户管理

    图 6建立两个角色‘zwzdatabase1’、‘zwzdatabase2’,和数据库用户“连接”起来
     

     

    题目2.4:授权一些用户可以创建表等数据库对象(创建表、视图权限)

    图 7  授权zwz01可以创建表
    注:主要是展示语法,具体例子在第三大题

     

    题目2.5完成角色管理及其他授权管理

    图 8 红框内是查看数据库角色zwzdatabase1的用户,即zwz01
    下方授权代码是授予zwz01用户相关权限

    第三大题:

    在完成第三大题之前,我们先创建三张表格,用于授予权限

    图 9 创建三张表格

    图 10 创建三个登入用户 分别是user01~03
    此时还没和数据库角色连起来  是虚的

     

     

    题目3.1:每个用户有建立对像的权限,各自建立自已的对象(如表和视图等)。

    图 11   自定义一个数据库角色user 然后实例化给user01、02、03,即连接起来
    分别赋予 各个用户 增删改查 自己表的权限
    比如 user01表可以增删改查user01table 以此类推

     

    题目3.2:各用户之间就表或视图的查询、修改、删除、插入等互相授权,在授权过程中体会GRANT命令中WITH GRANT OPTIN短语的作用。

     

    第一步:首先我们退出SQL server,改用user01的账号登入 ,执行以下代码:

    图 12 第一行代码为在自己的表中插入一行数据
    第二行代码为查找自己表的全部信息,已经输出
    第三行为把自己表的 增删改查 权限授权给 user02

     

    第二步:然后我们再退出SQL server,改用user02的账号登入 ,执行以下代码:

     

    首先查询user01table,因为user01已经赋予其权限,所以可以查到:

     

    再查询user02table,因为这本来就是自己的表,所以也可以查询:

    最后查询user03table,因为没有权限,无法访问

     

     

     

    题目3.3:分情况收回授权,并体会REVOKE命令中GRANT OPTION FOR 和CASCADE短语的作用

     

    我们先切换为user01的账号,执行以下代码:

    即删除对user02的授权

    然后再切换到user02的账号,查询表1,无法查询

     

    展开全文
  • 这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助! 1. 实验目的 理解和掌握数据库...
  • 这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助! 本文是存储过程,通过书本和...
  • 数据库实验报告

    2017-12-14 23:37:15
    本文档为数据库上机实验报告,是自己认认真真一步一步写的,报告包含试验中的具体步骤,过程以及代码和实验结果截图,和实验总结。 实验一 实验题目: 数据库管理系统的使用 实验目的: 掌握SQL SERVER2005的...
  • 这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助! 游标通俗化理解就是一个指针,...
  • oracle 10g 数据库基础教程实验报告 实验名称金融数据库技术 实验二 实验目的远程登录数据库使用OEMSQL等方法创建表熟悉创建语句 实验内容 1远程连接数据库 2用OEM管理表 3用SQL*Plus管理表 4Oracle数据操纵和查询 ...
  • 数据库综合实验

    2020-01-19 13:31:37
    本次内容是武汉理工大学数据库综合实验内容,总结本学期已经过去的数据库实验。本次实验主要学习一些简单的sql语句对数据库操作,通过...因为是最后总结,代码和结果放上实验报告中的内容,以截图形式。 实验一 数据...
  • 数据库原理 实验指导书 梁永先编 哈尔滨理工大学荣成学院 目录 实验一认识DBMS及其安装.8 实验二交互式SQL数据定义部分.13 实验三交互式SQL数据查询部分.15 实验四交互式SQL数据操纵部分.17 实验数据库的完整性与...
  • 数据库原理与应用》课程实验报告 数据库的组合和统计查询 目录《数据库原理与应用》课程实验报告 数据库的组合和统计查询二、实验过程及分析1.实验内容2.实验过程4.实验分析三、实验总结 使学生进一步掌握SQL ...
  • 建立环境实验和数据库/表 实验学时:2学时 实验类型:验证 实验要求:必修 一、实验目的 ...将实验结果反映在实验报告中,并对实验中遇到的问题及解决方案、进行整理、分析总结,提出实验结论或自己的看法。
  • 实验报告结构是否清晰,问题叙述是否具有逻辑性 Web数据库应用程序设计的正确性 六 时间的安排 共3周(见教学办安排)。每个同学可以根据自身实际情况掌握进度,做完整个项目即可验收,最晚到实践课的最后一天。 ...
  • 一、实验目的 1.熟悉SQL Server2012操作界面,了解数据库系统的逻辑组件; 2.熟悉SQL Server的管理控制台操作环境; 3.掌握使用SQL Server ...完成实验报告。 三、实验步骤 1.启动SSMS(SQL Server Management Studio.
  • 实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验内容的预习准备工作;...实验后做好实验总结,根据实验情况完成总结报告。正确的安装SQL Server 2000 Personal并成功注册服务器。
  • 数据库原理与应用》课程实验报告 数据库的组合和统计查询 目录《数据库原理与应用》课程实验报告 数据库的组合和统计查询二、实验过程及分析1.实验内容2.实验过程4.实验分析三、实验总结 使学生进一步掌握SQL ...
  • 文章目录一 、安装前的准备过程二、安装过程三、 安装中遇到的问题四、 解决措施五、心得体会六、总结 一 、安装前的准备过程 1.在软件管家找到SQL的资源并且在百度网盘下载完成 2.安装软件管家上的操作过程在我的...
  • SQL基本语法总结(含SQL代码)

    千次阅读 多人点赞 2020-02-18 16:06:44
    数据库好比人的大脑的记忆系统,没有了数据库就没有了记忆系统。而SQL语言作为数据库的王牌语言,肯定是重中...下面是大三第一学期《数据库原理》实验的目录,没必要把所有的实验报告都理出来,我把SQL基础的代码放在...
  • 数据库完整性与安全性实验报告、个人总结 内附详细的实验步骤及相关问题解决办法,包含SQL源码及操作截图 更加详细的介绍请查看liushendb的博客《数据库实验——数据库完整性与安全性实验by SixInNight》
  • 实验报告

    2020-12-14 13:25:37
    总结实验中遇到的问题 1 SQL语句执行不成功 2 创建视图不成功 3 一些SQL命令无法正确执行 解决办法 1 输入命令时要注意在半角英文的条件下,并且标点符号也是如此 2 创建视图时要注意视图的名称,避免重复 3 一些...
  • 数据库实验三 索引与视图

    千次阅读 2014-11-25 22:35:56
    实验三 索引和视图   一、 实验目的 1. 掌握利用SSMS和T—SQL语句创建和删除索引的两种方法。 2. 掌握利用SSMS和T—SQL语句创建、查询、更新及删除视图...3. 验后做好实验总结,根据实验情况完成实验报告
  • 数据库实验5——创建和删除索引

    千次阅读 2020-04-27 20:11:07
    文章目录创建和删除索引一、实验目的二、实验要求三、实验内容四、实验步骤五、 实验总结 ...注意操作结果的截图与保存,供撰写实验报告使用。 三、实验内容 1. 用SQL语句分别建立以下索引 (1) 在student表的Snam...
  • 实验目的 综合运用基于android平台的智能移动终端软件开发技术。 实验内容 设计实现一个智能移动终端软件应用,至少包含3个相互关联的应用功能,具有较好的用户界面和...这和sql查询语言类似,创建、查询、删除……
  • 数据库实验8——视图的定义与使用

    千次阅读 2020-05-08 21:03:10
    文章目录视图的定义与使用一、实验目的二、实验要求三、实验内容1.定义视图2.使用视图四、实验步骤五、实验总结 ...注意操作结果的截图与保存,供撰写实验报告使用。 三、实验内容 1.定义视图 在EDU
  • 实验3答案-sql2.sql

    2019-09-21 16:02:01
    SQL查询二 2 通过本实验使学生掌握多表查询、子查询以及基本数据操作 二、实验内容 ...将实验结果反映在实验报告中,并对实验中遇到的问题及解决方案、进行整理、分析总结,提出实验结论或自己的看法。
  • 实验2答案-sql1.sql

    2019-09-21 16:00:44
    SQL查询一 实验学时:2  实验类型:验证 实验要求:必修 一、实验目的 通过本实验使学生掌握单表...将实验结果反映在实验报告中,并对实验中遇到的问题及解决方案进行整理、分析总结,提出实验结论或自己的看法。

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

数据库sql实验报告总结