第一篇:数据库及数据库中表的建立实验
一、实验目的
1.熟悉SQL Server2000的环境。
2.掌握企业管理器的基本使用方法,对数据库及其对象有基本了解,了解SQLServer2000 进行配置的方法。
3.掌握查询分析器的基本使用方法以及在查询分析器中实行T-SQL语句的方法。4.了解SQL Server 2000数据库的逻辑结构和物理结构。5.学会在企业管理器中创建数据库及查看数据库属性。6.学会使用T-SQL语气创建数据库。
7.了解SQL Server 2000的基本数据类型、空值的概念,以及表的结构特点。8.学会使用T-SQL语气和企业管理器创建表结构和修改表结构。
9.学会使用SQL Server 2000提供的数据完整性功能,并在创建表时定义表的数据完整性。通过实验进一步理解数据完整性的概念及分类。
二、实验内容
1.学会使用企业管理器和查询分析器管理工具。2.使用企业管理器创建数据库。
3.在查询分析器中使用T-SQL语句创建数据库。4.使用T-SQL语句创建一个图书管理数据库,数据库名为TSGL,数据文件和日志 文件的初始大小,增长方式,文件的增长上限等均可采用默认值。
5.使用T-SQL语句或企业管理器创建课本第二章习题10的SPJ数据库,可以自行定义文件大小,增长方式等。
6.查看物理磁盘目录,理解并分析SQL Server 2000数据库的存储结构。7.使用企业管理器查看数据库属性。
8.使用T-SQL语句或企业管理器对于(2)-(5)中建立的数据库进行和删除操作。
9.用企业管理器在教务管理数据库JWGL中创建学生表STUDENT,课程表COURSE,学生选课表SC。
10.用TQL语句在数据库中创建客户信息基本表CUOSTOMERS,货品信息表GOODS,订单信息表ORDERS。
11.使用T-SQL语句在SPJ数据库中建立第2章习题10中的4张表:S,P,J,SPJ.12.使用T-SQL语句在图书借阅管理数据库TSGL中建立图书,读者和借阅3个表。
三.实验环境
装有SQL Server 2000 的机子
四.实验前准备
1.要明确能够创建数据库的用户必须是系统管理员,或是被授权使用 CREATE DATABASE 语句的用户。
2.创建数据库必须要确定数据库名、所有者(即创建数据库的用户)、数 据库大小(最初的大小、最大的大小、是否允许增长及增长的方式)和存储数据的文件。
3. 确定数据库包含哪些表以及包含的各表的结构,还要了解SQL Server 的常用数据类型,以创建数据库的表。4.了解常用的创建数据库和表的方法
五.实验步骤1.打开软件,熟悉SQL Server 2000的环境 2.使用企业管理器创建数据库。
(1)打开企业管理器,创建一个数据库JWGL.(2)在数据库属性中初始化设置文件大小为20MB等等内容。3.在查询分析器中使用T-SQL语句创建数据库。(1)打开查询分析器。
(2)创建一个数据库:Market。代码如下:
4.使用T-SQL语句或企业管理器创建一个图书管理数据库,数据库名为TSGL,数 据文件和日志文件的初始大小,增长方式,文件的增长上限等均可采用默认值。(1)打开企业管理器,然后再新建一个数据库。
(2)打开数据库属性栏,在数据库属性栏里设置数据库各种属性。5.使用T-SQL语句或企业管理器创建课本第二章习题10的SPJ数据库,可以自行定义文件大小,增长方式等。(1)打开企业管理器。
(2)创建SPJ数据库,并在属性栏里设置各种属性。
6.查看物理磁盘目录,理解并分析SQL Server 2000数据库的存储结构。7.使用企业管理器查看数据库属性。8.使用T-SQL语句或企业管理器对于
(2)-(5)中建立的数据库进行和删除操作,并进一步查看物理磁盘目录。9.用企业管理器在教务管理数据库JWGL中创建学生表STUDENT,课程表COURSE,学生选课表SC。(1)打开企业管理器,在教务管理数据库JWGL中按照课本上的表结构建立学表Student、课程表Course、学生选课表SC。
(2)用TQL语句在MARKET数据库中创建客户信息基本表CUOSTOMERS,货品信表GOODS,订单信息表ORDERS。
(1)打开查询分析器,依次输入一下几段代码创建表: CREATE TABLE Customers(CustomersID int IDENTITY(1,1)PRIMARY KEY, CName varchar(8)NOT NULL, Address varchar(50), City varchar(10), Tel varchar(20)UNIQUE, Company varchar(50), Birthday datetime, Type tinyint DEFAULT 1);
CREATE TABLE Goods(GoodsID int CONSTRAINT C1 PRIMARY KEY, GoodName varchar(20)NOT NULL, Price money, Description varchar(200), Storage int, Provider varchar(50), Status tinyint DEFAULT(0));
CREATE TABLE Orders(OrderID int IDENTITY(1,1)CONSTRAINT C2 PRIMARY KEY, GoodsID Int NOT NULLREFERENCES Goods(GoodsID)ON DELETE CASCADE, CustomersID int NOT NULL FOREIGN KEY(CustomersID)REFERENCES Customers(CustomersID)ON DELETE NO ACTION, Quantity int NOT NULL CONSTRAINT C3 CHECK(Quantity >0), OrderSum money NOT NULL OrderDate datetime DEFAULT(getdate()));依次运行。
11.使用T-SQL语句在SPJ数据库中建立第2章习题10中的4张表:供应商表S,零件表P,工程项目表J,供应情况表SPJ,建表过程中定义主键、外健和其他的数据完整性。
12.使用T-SQL语句在图书借阅管理数据库TSGL中建立图书,、读者和借阅3个表,结构为:图书(书号,书名,类别,出版社,作者,定价,出版时间)
读者(借书证号,姓名,单位,性别,地址,电话号码)
借阅(书号,借书证号,借阅日期)
六、实验结果 由于篇幅原因,只截取了部分有代表性的实验结果图,这些图都是建立其他操作的基础上的。
七、评价分析及心得体会
通过这次的实验,我充分了解了SQL SEVER的企业管理器的使用方法,并且对SQL SEVER的查询分析器的使用也有了初步的了解,同时也熟练的掌握了简单表的创建与修改,相信的以后的深入学习过程中,我能更加透彻的了解并且运用它。
第二篇:数据库及数据库中表的建立实验报告
实验题目:数据库及数据库中表的建立
学院: 计算机班级:网络0803学号:
姓名:任课教师:孟彩霞时间:
一.实验目的1.熟悉SQL Server2000的环境。
2.掌握企业管理器的基本使用方法,对数据库及其对象有基本了解,了解SQL Server2000进行配置的方法。
3.掌握查询分析器的基本使用方法以及在查询分析器中实行T-SQL语气的方法。
4.了解SQL Server 2000数据库的逻辑结构和物理结构。
5.学会在企业管理器中创建数据库及查看数据库属性。
6.学会使用T-SQL语气创建数据库。
7.了解SQL Server 2000的基本数据类型、空值的概念,以及表的结构特点。
8.学会使用T-SQL语气和企业管理器创建表结构和修改表结构。
9.学会使用SQL Server 2000提供的数据完整性功能,并在创建表时定义表的数据完整性。通过实验进一步理解数据完整性的概念及分类。
二.实验内容
1.学会使用企业管理器和查询分析器管理工具。
2.使用企业管理器创建数据库。
3.在查询分析器中使用T-SQL语句创建数据库。
4.使用T-SQL语句创建一个图书管理数据库,数据库名为TSGL,数据文件和日志文件的初始大小,增长方式,文件的增长上限等均可采用默认值。
5.使用T-SQL语句或企业管理器创建课本第二章习题10的SPJ数据库,可以自行定义文件大小,增长方式等。
6.查看物理磁盘目录,理解并分析SQL Server 2000数据库的存储结构。
7.使用企业管理器查看数据库属性。
8.使用T-SQL语句或企业管理器对于(2)-(5)中建立的数据库进行和删除操作。
9.用企业管理器在教务管理数据库JWGL中创建学生表STUDENT,课程表COURSE,学生选课表SC。
10.用TQL语句在MARKET数据库中创建客户信息基本表CUOSTOMERS,货品信息表GOODS,订单信息表ORDERS。
11.使用T-SQL语句在SPJ数据库中建立第2章习题10中的4张表:S,P,J,SPJ.12.使用T-SQL语句在图书借阅管理数据库TSGL中建立图书,读者和借阅3个表。
三.实验环境
MS SQL Server 2000
四.实验前准备
五.实验步骤
1.打开软件,熟悉 SQL Server 2000的环境
2.使用企业管理器创建数据库。
(1)打开企业管理器,创建一个数据库JWGL.(2)在数据库属性中初始化设置文件大小为20MB等等内容。
3.在查询分析器中使用T-SQL语句创建数据库。
(1)打开查询分析器。
(2)创建一个数据库:Market。代码如下:
CREATE DATABASE Market
ON
(NAME=Market-data,FILENAME=’e:sq1-datamarket-data.mdf’,SIZE=10,MAXSIZE=50,FILEGROWTH=10%)
LOG ON
(NAME= NAME=Market-data,FILENAME=’e:sq1-datamarket-LOG.Ldf’,SIZE=5,MAXSIZE=15,FILEGROWTH=10%);
4.使用T-SQL语句或企业管理器创建一个图书管理数据库,数据库名为TSGL,数据文件和日志文件的初始大小,增长方式,文件的增长上限等均可采用默认值。
(1)打开企业管理器,然后再新建一个数据库。
(2)打开数据库属性栏,在数据库属性栏里设置数据库各种属性。
5.使用T-SQL语句或企业管理器创建课本第二章习题10的SPJ数据库,可以自行定义文件大小,增长方式等。
(1)打开企业管理器。
(2)创建spj数据库,并在属性栏里设置各种属性。
6.查看物理磁盘目录,理解并分析SQL Server 2000数据库的存储结构。
7.使用企业管理器查看数据库属性。
8.使用T-SQL语句或企业管理器对于(2)-(5)中建立的数据库进行和删除操作,并进一步查看物理磁盘目录。
9.用企业管理器在教务管理数据库JWGL中创建学生表STUDENT,课程表COURSE,学生选课表SC。
(1)打开企业管理器,在教务管理数据库JWGL中按照课本上的表结构建立学
生表Student、课程表Course、学生选课表SC。
(2)用TQL语句在MARKET数据库中创建客户信息基本表CUOSTOMERS,货品信息表GOODS,订单信息表ORDERS。
(1)打开查询分析器,依次输入一下几段代码创建表:
Customers 表:
CREATE TABLE Customers(CustomersID int IDENTITY(1,1)PRIMARY KEY,CName varchar(8)NOT NULL,Address varchar(50),City varchar(10),Tel varchar(20)UNIQUE,Company varchar(50),Birthday datetime,Type tinyint DEFAULT 1);
Goods 表:
CREATE TABLE Goods(GoodsID int CONSTRAINT C1 PRIMARY KEY,GoodName varchar(20)NOT NULL,Price money,Description varchar(200),Storage int,Provider varchar(50),Status tinyintDEFAULT(0));
Orders 表:
CREATE TABLE Orders(OrderID int IDENTITY(1,1)CONSTRAINT C2 PRIMARY KEY,GoodsID int NOT NULL REFERENCES Goods(GoodsID)ON DELETE CASCADE,CustomersID int NOT NULL FOREIGN KEY(CustomersID)
REFERENCES Customers(CustomersID)ON DELETE NO ACTION,Quantity int NOT NULL CONSTRAINT C3 CHECK(Quantity >0),OrderSum money NOT NULL
OrderDate datetime DEFAULT(getdate()));
依次运行。
11.使用T-SQL语句在SPJ数据库中建立第2章习题10中的4张表:供应商表S,零件表P,工程项目表J,供应情况表SPJ,建表过程中定义主键、外健和其他的数据完整性。
12.使用T-SQL语句在图书借阅管理数据库TSGL中建立图书,读者和借阅3个表,结构为:
图书(书号,书名,类别,出版社,作者,定价,出版时间)
读者(借书证号,姓名,单位,性别,地址,电话号码)
借阅(书号,借书证号,借阅日期)
六.实验结果
七.评价分析及心得体味
第三篇:数据库实验
实验1.1 使用SQL Server工具(Microsoft SQL Server Management Studio Express)管理数据库 实验内容:
(1)使用SSMS(SQL Server Management Studio)加入实验数据库。(2)使用SSMS可视化建立、修改和删除数据库、表。(3)使用SSMS对数据库进行备份和恢复。
(4)使用SSMS对表进行查询、插入、修改、删除。实验步骤:
(1)加入School数据库。(2)建立Test数据库。
(3)在数据库中建立人员表PERSON(P#,Pname,Page)。更改表设置P#为主键,增加属性Ptype(类型是CHAR,长度是10)。
(4)用SSMS的查询功能(新建查询)对PERSON表进行查询、插入、修改、删除等操作:首先插入两条记录;修改第二条记录;删除第二条记录。(5)备份Test数据库。(6)删除表PERSON。(7)恢复Test数据库。(8)删除Test数据库。
第四篇:数据库实验
3.实验步骤
在学生选课数据库中实现其查询操作,写出T-SQL语句(注:学生选课数据库为前三次实验课所建立的数
据库)
一、简单查询实验
(1)查询选修了课程的学生学号。
(2)查询选修课程号为0101的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按
学号升序排列。
(3)查询选修课程号为0101的成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。
二、连接查询实验
(1)查询每个学生的情况以及他(她)所选修的课程。
(2)查询选修离散散学课程且成绩为90分以上的学生学号、姓名及成绩。
(3)查询每一门课的间接先行课(即先行课的先行课)
三、嵌套查询操作
(1)查询0101课程的成绩高于张林的学生学号和成绩。
(2)查询其他系中年龄小于计算机系年龄最大者的学生。
(3)查询同王洪敏“数据库原理”课程分数相同的学生的学号。
(4)查询选修了全部课程的学生的姓名。
(5)查询与学号为09001103的学生所选修的全部课程相同的学生学号和姓名。
(6)查询至少选修了学号为09001103的学生所选修的全部课程的学生学号和姓名。
四、组合查询和分组查询
(1)查找选修“计算机基础”课程的学生成绩比此课程的平均成绩大的学生学号、成绩。
(2)查询年龄大于女同学平均年龄的男同学姓名和年龄。
(3)列出各系学生的总人数,并按人数进行降序排列。
(5)查询选修计算机基础和离散数学的学生学号和平均成绩。
4、要求
请按题号依次作答,完成在word文档中,写明班级学号姓名,于周日之于周日之前发至xcf7@163.com,独立完成,严禁抄
第五篇:数据库实验心得
我在sql server 索引基础知识系列中,第一篇就讲了记录数据的基本格式。那里主要讲解的是,数据库的最小读存单元:数据页。一个数据页是8k大小。
对于数据库来说,它不会每次有一个数据页变化后,就存到硬盘。而是变化达到一定数量级后才会作这个操作。这时候,数据库并不是以数据页来作为操作单元,而是以64k的数据(8个数据页,一个区)作为操作单元。
区是管理空间的基本单位。一个区是八个物理上连续的页(即 64 kb)。这意味着 sql server 数据库中每 mb 有 16 个区。
为了使空间分配更有效,sql server 不会将所有区分配给包含少量数据的表。sql server 有两种类型的区:
统一区,由单个对象所有。区中的所有 8 页只能由所属对象使用。
混合区,最多可由八个对象共享。区中八页的每页可由不同的对象所有。
通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都使用统一区进行。
为何会这样呢?
其实很简单:
读或写 8kb 的时间与读或写 64 kb的时间几乎相同。
在 8 kb 到 64 kb 范围之内,单个磁盘 i/o 传输操作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。
因此,从数学上来讲,当需要传输 64 kb 以上的 sql 数据时,尽可能地执行 64 kb 磁盘传输是有益的,即分成数个64k的操作。
因为 64 kb 传输基本上与 8 kb 传输一样快,而每次传输的 sql server 数据是 8 kb 传输的 8 倍。
我们通过一个实例来看 有and 操作符时候的最常见的一种情况。我们有下面一个表,create table [dbo].[member]([member_no] [dbo].[numeric_id] identity(1,1)not null, [lastname] [dbo].[shortstring] not null, [firstname] [dbo].[shortstring] not null, [middleinitial] [dbo].[letter] null, [street] [dbo].[shortstring] not null, [city] [dbo].[shortstring] not null, [state_prov] [dbo].[statecode] not null, [country] [dbo].[countrycode] not null, [mail_code] [dbo].[mailcode] not null, [phone_no] [dbo].[phonenumber] null, [photograph] [image] null, [issue_dt] [datetime] not null default(getdate()), [expr_dt] [datetime] not null default(dateadd(year,1,getdate())), [region_no] [dbo].[numeric_id] not null, [corp_no] [dbo].[numeric_id] null, [prev_balance] [money] null default(0), [curr_balance] [money] null default(0), [member_code] [dbo].[status_code] not null default(' '))
这个表具备下面的四个索引:
索引名 细节 索引的列
member_corporation_link nonclustered located on primary corp_no
member_ident clustered, unique, primary key located on primary member_no
member_region_link nonclustered located on primary region_no
memberfirstname nonclustered located on primary firstname
当我们执行下面的sql查询时候,select m.member_no, m.firstname, m.region_nofrom dbo.member as mwhere m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
sql server 会根据索引方式,优化成下面方式来执行。
select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as m where m.firstname like 'k%' and m.member_no < 5000)a ,--这个查询可以直接使用 memberfirstname 非聚集索引,而且这个非聚集索引覆盖了所有查询列--实际执行时,只需要 逻辑读取 3 次
(select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6)b
--这个查询可以直接使用 member_region_link 非聚集索引,而且这个非聚集索引覆盖了所有查询列--实际执行时,只需要 逻辑读取 10 次
where a.member_no = b.member_no
不信,你可以看这两个sql 的执行计划,以及逻辑读信息,都是一样的。
其实上面的sql,如果优化成下面的方式,实际的逻辑读消耗也是一样的。为何sql server 不会优化成下面的方式。是因为 and 操作符优化的另外一个原则。
1/26 的数据和 1/6 的数据找交集的速度要比 1/52 的数据和 1/3 的数据找交集速度要慢。
select a.member_no,a.firstname,b.region_nofrom(select m.member_no, m.firstname from dbo.member as mwhere m.firstname like 'k%'--1/26 数据)a,(select m.member_no, m.region_no from dbo.member as mwhere m.region_no > 6 and m.member_no < 5000--1/3 * 1/ 2 数据)bwhere a.member_no = b.member_no
当然,我们要学习sql 如何优化的话,就会用到查询语句中的一个功能,指定查询使用哪个索引来进行。
比如下面的查询语句
select m.member_no, m.firstname, m.region_nofrom dbo.member as m with(index(0))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
select m.member_no, m.firstname, m.region_nofrom dbo.member as m with(index(1))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with(index(membercovering3))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000goselect m.member_no, m.firstname, m.region_nofrom dbo.member as m with(index(memberfirstname, member_region_link))where m.firstname like 'k%' and m.region_no > 6 and m.member_no < 5000go
这里 index 计算符可以是 0,1,指定的一个或者多个索引名字。对于 0,1 的意义如下:
如果存在聚集索引,则 index(0)强制执行聚集索引扫描,index(1)强制执行聚集索引扫描或查找(使用性能最高的一种)。
如果不存在聚集索引,则 index(0)强制执行表扫描,index(1)被解释为错误。
总结知识点:
简单来说,我们可以这么理解:sql server 对于每一条查询语句。会根据实际索引情况(sysindexes 系统表中存储这些信息),分析每种组合可能的成本。然后选择它认为成本最小的一种。作为它实际执行的计划。
成本代价计算的一个主要组成部分是逻辑i/o的数量,特别是对于单表的查询。
and 操作要满足所有条件,这样,经常会要求对几个数据集作交集。数据集越小,数据集的交集计算越节省成本。的项目中,竟然出现了滥用聚集索引的问题。看来没有培训最最基础的索引的意义,代价,使用场景,是一个非常大的失误。这篇博客就是从这个角度来罗列索引的基础知识。
使用索引的意义
索引在数据库中的作用类似于目录在书籍中的作用,用来提高查找信息的速度。
使用索引查找数据,无需对整表进行扫描,可以快速找到所需数据。
使用索引的代价
索引需要占用数据表以外的物理存储空间。
创建索引和维护索引要花费一定的时间。
当对表进行更新操作时,索引需要被重建,这样降低了数据的维护速度。
创建索引的列
主键
外键或在表联接操作中经常用到的列
在经常查询的字段上最好建立索引
不创建索引的列
很少在查询中被引用
包含较少的惟一值
定义为 text、ntext 或者 image 数据类型的列
heaps是staging data的很好选择,当它没有任何index时
excellent for high performance data loading(parallel bulk load and parallel index creation after load)
excellent as a partition to a partitioned view or a partitioned table
聚集索引提高性能的方法,在前面几篇博客中分别提到过,下面只是一个简单的大纲,细节请参看前面几篇博客。
何时创建聚集索引?
clustered index会提高大多数table的性能,尤其是当它满足以下条件时:
独特, 狭窄, 静止: 最重要的条件
持续增长的,最好是只向上增加。例如:
identity
date, identity
guid(only when using newsequentialid()function)
聚集索引唯一性(独特型的问题)
由于聚集索引的b+树结构的叶子节点必须指向具体数据。如果你要建立聚集索引的列不唯一,并且你指定的创建的聚集索引是非唯一的聚集索引,则会有以下情况:
如果未使用 unique 属性创建聚集索引,数据库引擎 将向表自动添加一个四字节 uniqueifier 列。必要时,数据库引擎 将向行自动添加一个 uniqueifier 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。