中国重要会议论文全文数据库。该数据库收录了国内重要会议主办单位或论文汇编单位书面授权,投稿到“中国知网”进行数字出版的会议论文,是《中国学术期刊(光盘版)》电子杂志社编辑出版的国家级连续电子出版物。天津商业大学宝德学院论文用的就是这个数据库。
数据库实验总结一
试验内容
1、 数据表的建立
基本表《简单的》带有主键
带有外码约束的(外码来自其他表或者本表)
2、 数据表的修改
添加删除列
修改列属性类型
添加删除约束(约束名)
元组的添加,修改,删除
删除数据表
试验过程
1、create table student
(
sno char(9) primary key , /sno是主码 列级完整性约束条件/
sname char(20) unique, /sname取唯一值/
ssex char(2),
sage smallint, /类型为smallint/
sdept char(20) /所在系/
);
create table course
(
cno char(4) primary key, /列级完整性约束条件,cno是主码/
cname char(40),
cpno char(4), /cpno的含义是先行课/
ccredit smallint,
foreign key (cpno) references course(cno)
/表级完整性约束条件,cpno是外码,被参照表是course,被参照列是cno/
);
create table sc
(
sno char(9),
cno char(4),
grade smallint,
primary key (sno,cno),
/主码有两个属性构成,必须作为表级完整性进行定义/
foreign key (sno) references student(sno),
/表级完整性约束条件,sno是外码,被参照表是student/
foreign key (cno) references course(cno),
/表级完整性约束条件,cno是外码,被参照表示course/
);
例1、create table s
(
cno varchar(3), /变长的字符串,输入2个字符就是两个字符不会补空格/
sname varchar(20),
status int,
city varchar(20),
constraint pk_sno primary key(sno), /约束条件的名字为pk_sno/
);
create table p
(
pno varchar(3),
pname varchar(20),
color varchar(3),
weight int,
constraint pk_pno primary key (pno), /约束条件的名字是pk_pno/
);
create table j
(
jno varchar(3),
jname varchar(20),
city varchar(20),
constraint pk_jno primary key(jno) /约束条件的名字为pk_jno/
);
例2、create table spj
(
sno varchar(3), /第一个表中的主码/
pno varchar(3),
jno varchar(3),
qty int, /数量/
constraint pk_spj primary key(sno,pno,jno), /主码由3个属性组成/
foreign key(sno) references s(sno),
/表级完整性约束条件,sno是外码,被参照表是s/
foreign key(pno) references p(pno),
/表级完整性约束条件,pno是外码,被参照表是p/
foreign key(jno) references j(jno),
/表级完整性约束条件,jno是外码,被参照表是j/
);
2、数据表的更改
在s表中添加一个concat 列
alter table s add concat varchar(20)
在s表中删除concat 列
alter table s drop column concat
更改s表 concat列的属性 把长度由20改为30
alter table s alter column concat varchar(30)
**** 名字为concat 修改属性为唯一的 属性名为con_concat
alter table s add constraint con_concat unique(concat)
删除约束关系con_concat
alter table s drop constraint con_concat
/插入一个元组/
insert into s valus(‘s1’,’精益’,20,’天津’) /20不能写成’20’/
试验中的问题的排除与总结:
1、在创建spj时
有三个实体所以从3个实体中取主码,还有一个数量属性也要写上
主码由那3个主码确定
2、更改一个数据库中数据表时一定要先使该数据库处于正在使用状态
3、constraint
是可选关键字,表示 primary key、not null、unique、foreign key 或 check 约束定义的开始。约束是特殊属性,用于强制数据完整性并可以为表及其列创建索引。
4、--go可以不加但是要注意顺序 注:go --注释 提示错误
5、注意添加一个空元素用 null
附 sql备份
--创建一个数据库 student
create database student
go
--在数据库student中创建表student course sc 注意顺序
use student
----------------------------------------------------------------
create table student
(
sno char(9) primary key, /sno是主码 列级完整性约束条件/
sname char(10) unique, /sname取唯一值/
ssex char(2),
sage smallint, /类型为smallint/
sdept char(20) /所在系/
); /;要加/
-----------
数据库实验总结二我在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 mmember_no, mfirstname, mregion_nofrom dbomember as mwhere mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000go
sql server 会根据索引方式,优化成下面方式来执行。
select amember_no,afirstname,bregion_nofrom(select mmember_no, mfirstname from dbomember as m where mfirstname like 'k%' and mmember_no < 5000) a , -- 这个查询可以直接使用 memberfirstname 非聚集索引,而且这个非聚集索引覆盖了所有查询列-- 实际执行时,只需要 逻辑读取 3 次
(select mmember_no, mregion_no from dbomember as mwhere mregion_no > 6) b
-- 这个查询可以直接使用 member_region_link 非聚集索引,而且这个非聚集索引覆盖了所有查询列-- 实际执行时,只需要 逻辑读取 10 次
where amember_no = bmember_no
不信,你可以看这两个sql 的执行计划,以及逻辑读信息,都是一样的。
其实上面的sql,如果优化成下面的方式,实际的逻辑读消耗也是一样的。为何sql server 不会优化成下面的方式。是因为 and *** 作符优化的另外一个原则。
1/26 的数据和 1/6 的数据找交集的速度要比 1/52 的数据和 1/3 的数据找交集速度要慢。
select amember_no,afirstname,bregion_nofrom(select mmember_no, mfirstname from dbomember as mwhere mfirstname like 'k%' -- 1/26 数据) a,
(select mmember_no, mregion_no from dbomember as mwhere mregion_no > 6 and mmember_no < 5000-- 1/3 1/ 2 数据) bwhere amember_no = bmember_no
当然,我们要学习sql 如何优化的话,就会用到查询语句中的一个功能,指定查询使用哪个索引来进行。
比如下面的查询语句
select mmember_no, mfirstname, mregion_nofrom dbomember as m with (index (0))where mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000go
select mmember_no, mfirstname, mregion_nofrom dbomember as m with (index (1))where mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000goselect mmember_no, mfirstname, mregion_nofrom dbomember as m with (index (membercovering3))where mfirstname like 'k%' and mregion_no > 6 and mmember_no < 5000goselect mmember_no, mfirstname, mregion_nofrom dbomember as m with (index (memberfirstname, member_region_link))where mfirstname like 'k%' and mregion_no > 6 and mmember_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 值,使每个键唯一。此列和列值供内部使用,用户不能查看或访问。
USE master
GO
IF EXISTS (SELECT FROM sysdatabases WHERE name = 'MySchool')
DROP DATABASE MySchool
GO
CREATE DATABASE MySchool
ON
(
NAME = ' MySchool_data', --主数据文件的逻辑名
FILENAME = 'D:\MySchool_datamdf' , --主数据文件的物理名
SIZE = 10 MB, --主数据文件初始大小
FILEGROWTH = 20 %
)
LOG ON
(
NAME = 'MySchool_log',
FILENAME = 'D:\MySchool_logldf' ,
SIZE = 3MB,
MAXSIZE = 20MB,
FILEGROWTH = 1MB
)
GO
------------------------------------------------------------------创建表
USE MySchool
GO
IF EXISTS (SELECT FROM sysobjects WHERE name='Subject' )
DROP TABLE Subject
GO
CREATE TABLE Subject --创建课程表
(
SubjectNo int IDENTITY(1,1) NOT NULL,
SubjectName nvarchar(50) NOT NULL,
ClassHour int NOT NULL,
GradeId int NOT NULL
)
IF EXISTS (SELECT FROM sysobjects WHERE name=' Result' )
DROP TABLE Result
GO
CREATE TABLE Result --创建成绩表
(
StudentNo int NOT NULL,
SubjectNo int NOT NULL,
StudentResult decimal(5,2) NOT NULL,
ExamDate datetime NOT NULL
)
GO
IF EXISTS(SELECT FROM sysobjects WHERE name='Student')
DROP TABLE Student --------创建学生表
CREATE TABLE [dbo][Student](
[StudentNo] [int] NOT NULL,
[LoginPwd] [nvarchar](50) NOT NULL,
[StudentName] [nvarchar](50) NOT NULL,
[Sex] bit NOT NULL,
[GradeId] [int] NOT NULL,
[Phone] [nvarchar](50) NULL,
[Address] [nvarchar](255) NULL,
[BornDate] [datetime] NOT NULL,
[Email] [nvarchar](50) NULL,
[IdentityCard] [varchar](18) NOT NULL
)
IF EXISTS(SELECT FROM sysobjects WHERE name='Grade')
DROP TABLE Grade ---创建年级表
CREATE TABLE [dbo][Grade](
[GradeId] [int] IDENTITY(1,1) NOT NULL,
[GradeName] [nvarchar](50) NOT NULL
)
------------------------------------------------------------------添加约束
ALTER TABLE Grade ADD CONSTRAINT PK_grade PRIMARY KEY(gradeId)
ALTER TABLE Student --主键约束
ADD CONSTRAINT PK_StuNo PRIMARY KEY (StudentNo)
ALTER TABLE Student --唯一约束(身份z号唯一)
ADD CONSTRAINT UQ_stuID UNIQUE (IdentityCard)
ALTER TABLE Student --默认约束(地址不详)
ADD CONSTRAINT DF_stuAddress DEFAULT ('地址不详') FOR Address
ALTER TABLE Student --检查约束(出生日期是自1980年1月1日以后)
ADD CONSTRAINT CK_stuBornDate CHECK(BornDate>='1980-1-1')
ALTER TABLE Student --添加外键约束
ADD CONSTRAINT FK_Grade
FOREIGN KEY(GradeID) REFERENCES Grade(GradeID)
ALTER TABLE Subject --主键约束(课程编号)
ADD CONSTRAINT PK_Subject PRIMARY KEY (SubjectNo)
ALTER TABLE Subject --非空约束(课程名称)
ADD CONSTRAINT CK_SubjectName CHECK (SubjectName is not null)
ALTER TABLE Subject WITH NOCHECK --检查约束(学时必须大于等于0)
ADD CONSTRAINT CK_ClassHour CHECK (ClassHour>=0)
ALTER TABLE Subject --外键约束(主表Grade和从表Subject建立引用关系)
ADD CONSTRAINT FK_GradeId
FOREIGN KEY (GradeId) REFERENCES Grade (GradeId)
GO
------------------------------------------------
ALTER TABLE Result --主键约束(学号、科目号、日期)
ADD CONSTRAINT PK_Result PRIMARY KEY
(StudentNo, SubjectNo, ExamDate)
ALTER TABLE Result --默认约束(日期为系统当前日期)
ADD CONSTRAINT CK_ExamDate DEFAULT (getdate()) FOR ExamDate
ALTER TABLE Result --检查约束(分数不能大于100,小于0)
ADD CONSTRAINT CK_StudentResult CHECK
(StudentResult BETWEEN 0 AND 100)
ALTER TABLE Result --外键约束(主表Student和从表Result建立关系)
ADD CONSTRAINT FK_StudentNo
FOREIGN KEY (StudentNo) REFERENCES Student (StudentNo)
ALTER TABLE Result --外键约束(主表Subject和从表Result建立关系)
ADD CONSTRAINT FK_SubjectNo
FOREIGN KEY (SubjectNo) REFERENCES Subject (SubjectNo)
GO
--------------------------------------------------------------
INSERT INTO Grade VALUES('S1')
INSERT INTO Grade VALUES('S2')
INSERT INTO Grade VALUES('Y2')
INSERT INTO Student
SELECT 10000,'123','郭靖',1,1,'8739874983','天津市河西区','1992-4-2','tain@34com','12189234123453321' UNION
SELECT 10001,'abc','李文才',1,1,'22342434','地址不详','1990-3-2','dfesdf@34com','22112189234533341' UNION
SELECT 10002,'555','李斯文',0,1,'745665656','河南洛阳','1992-8-4','4554@3gf4com','32131218923414523' UNION
SELECT 10003,'1234','王爱家',0,1,'45645656','南京雨花台','1993-8-4','4554@3gf4com','32131289214534123' UNION
SELECT 10004,'4444','刘宏',1,1,'32343434','成都谢菲联','1993-8-4','4554@3gf4com','32131189245341223' UNION
SELECT 10005,'3333','孙甜甜',0,1,'2454554','杭州西湖','1993-8-4','4554@3gf4com','32131214534123892' UNION
SELECT 20013,'123','黄药师',1,2,'45666434','北京市海淀区','1987-9-23','kjhjh@34com','33411218924523321' UNION
SELECT 20014,'456','梅超风',0,2,'76774344','沈阳市和平区','1989-12-23','dsdsd@rtrcom','94531218321234123' UNION
SELECT 30025,'123456','周瑜',1,3,'32343535','上海市卢湾区','1991-4-3','fdfdf@ssscom','34533211218923412' UNION
SELECT 30026,'xyz','关羽',1,3,'74332434','广州是天河区','1990-11-12','erwer@343com','13453321218923412'
INSERT INTO Subject
SELECT 'Winforms',20,1 UNION
SELECT 'Java Logic',34,1 UNION
SELECT 'SQL Base',16,1 UNION
SELECT 'HTML',48,1 UNION
SELECT 'Proc',8,1 UNION
SELECT 'C# OOP',46,2 UNION
SELECT 'Three Tier',32,2 UNION
SELECT 'Java OOP',56,2 UNION
SELECT 'JSP',42,2 UNION
SELECT 'ASPNET',86,3 UNION
SELECT 'AJAX',46,3
INSERT INTO Result VALUES(10000,5,875,DEFAULT)
INSERT INTO Result VALUES(10000,5,675,'2011-3-5')
INSERT INTO Result VALUES(10001,5,48,'2010-8-9')
INSERT INTO Result VALUES(10002,5,65,DEFAULT)
INSERT INTO Result VALUES(10003,5,975,DEFAULT)
INSERT INTO Result VALUES(10004,5,60,DEFAULT)
INSERT INTO Result VALUES(10005,5,89,'2009-9-7')
INSERT INTO Result VALUES(30026,2,56,DEFAULT)
INSERT INTO Result VALUES(10000,3,77,'2011-11-2')
INSERT INTO Result VALUES(10001,3,455,DEFAULT)
INSERT INTO Result VALUES(10003,5,975,'2011-2-2')
INSERT INTO Result VALUES(20013,4,56,DEFAULT)
INSERT INTO Result VALUES(20014,4,43,DEFAULT)
INSERT INTO Result VALUES(10000,3,74,DEFAULT)
INSERT INTO Result VALUES(10001,11,455,'2010-12-3')
删除,更新,存储过程,照着书上随便写两条。。
以上就是关于天津商业大学宝德学院论文用的哪个数据库全部的内容,包括:天津商业大学宝德学院论文用的哪个数据库、数据库实验总结、sql server分离数据库后,图标带小锁。我要交作业。把表拷给老师 ,老师能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)