实验五 实体参照完整性以及索引的建立和使用

合集下载

实验五 实体参照完整性以及索引的建立和使用

实验五 实体参照完整性以及索引的建立和使用

实验五指导5.1 实体完整性1)在数据库School中建立表Stu_Union,进行主键约束,在没有违反实体完整性的前提下插入并更新一条记录use Schoolcreate table Stu_Union(Sno char(8)not null unique,Sname char(8),Ssex char(1),Sage int,constraint PK_Stu_Union primary key(Sno))insert Stu_Union values('456','小二','M','22')update Stu_Union set Sno=''WHERE Sage='22'update Stu_Union set Sno='789'where Sname='小二'select*from Stu_Union2)演示违反实体完整性的插入操作use Schoolinsert Stu_Union values('789','小三','M','23')3)演示违反实体完整性的更新操作use Schoolupdate Stu_Union set Sno=NULL where Sno='789'4)演示事务的处理,包括事务的建立,处理以及出错时的事务回滚,演示事务处理和批处理的区别。

提示:SQL2005相关语句为BEGIN TRANROLLBACK TRANCOMMIT TRAN可以这样演示:新建一个包含两条语句的事务,使第一条成功而第二条失败,然后查看整个事务是否回滚。

重要提示:SQL默认只回滚出错的语句,要回滚整个事务,需要预先执行以下语句:SET XACT_ABORT ON事务的建立use Schoolset xact_abort onbegin transaction t1insert into Stu_Union values('001','张三','M','22')insert into Stu_Union values('002','李四','F','24')insert into Stu_Union values('003','李四','F','24')select*from Stu_Unioncommit transaction t1处理以及出错时的回滚use Schoolset xact_abort onbegin transaction t2insert into Stu_Union values('004','王五','M','23')select*from Stu_Unioninsert into Stu_Union values('789','钱六','F','21')commit transaction t2use Schoolselect*from Stu_Union5)通过建立Scholarship表,插入一些数据。

实验 视图、索引与数据库关系图

实验 视图、索引与数据库关系图

实验名称:实验五视图、索引与数据库关系图班级学号姓名日期所在院系指导老师成绩一、试验目的使学生掌握SQL Server中的视图创建、查看、修改和删除的方法;索引的创建和删除的方法;数据库关系图的实现方法。

加深对视图和SQL Server数据库关系图的理解。

二、实验内容(1)创建、查看、修改和删除视图。

(2)创建、删除索引文件。

(3)创建数据库关系图。

三、试验步骤1)视图操作(1)创建视图。

使用SQL Server Management Studio直接创建,步骤如下:1.单击数据库前面的+号,然后再单击“学生选课”数据库前面的+号,右击“视图”,在弹出的快捷菜单中选择“新建视图”命令,弹出“添加表”对话框。

如图5.1所示图5.1 “添加表”对话框2.在“添加表”对话框中,添加视图数据来源的表,这里添加三张表,分别是student、course和sc表。

添加表后,单击添加表对话框中的“关闭”按钮,出现创建视图界面。

如图5.2所示图5.2添加字段前的效果图3.如果要在视图中显示某些表的某个字段,只需单击其字段前的复选框即可,同时在中间列中会显示该字段,在代码区中会看到具体实现的代码。

4.如果要查看视图,单击常用工具栏中的“执行”按钮,就可以看到视图的数据显示,如由字段student.sno、sname、cname、grade生成的视图效果。

如图5.3所示图5.3 生成视图效果图5.在创建视图中还可以为字段添加列名、进行排序、添加多个筛选条件。

6.单击常用工具栏中的“保存”按钮,就可以弹出保存视图提示对话框,输入视图名字即可,为view_stu_grade。

(2)修改视图。

视图创建好后,就可以利用它进行查询信息了。

如果发现视图的结构不能很好的满足要求,还可以对它进行修改。

使用SQL Server Management Studio直接修改,步骤如下:1.在SQL Server Management Studio中,选择服务器、数据库、并使数据库展开,再单击“视图”前面的+,就可以看到已存在的视图了。

实验报告五 视图与索引

实验报告五 视图与索引

实验五视图与索引一.实验目的1.学会使用企业管理器建立视图与索引2.掌握使用SQL语句建立视图与索引二.实验内容1.使用企业管理器建立视图索引2.使用SQL语句建立视图索引三.实验准备1.复习与本次实验内容相关知识2.对本次实验中要求自己完成的部分做好准备四.实验步骤1.用企业管理器建立一个基于学生表、课程表、成绩表的视图,要求该视图显示学号、姓名、课程、成绩o启动企业管理器、注册、连接o"新建视如下图所示o在新视图窗口内的关系图窗格内右击鼠标,弹出的菜单即为视图设计菜单,执行"添加表(B)...",如下图所示再在添加表对话框中选择SCORES表,再单击添加按钮。

依此操作,分别添加STUDENT、COURSES表,单击关闭按钮。

再在关系窗格内,拖动STUDENT表的"SID"至SCORES的STUDENT_ID,拖动COURSES表的"CNO"至SCORES的COURSE_ID,再分别选中STUDENT表的"SID","NAME"列(列前的复选框),COURSES表的"COURSE"列以及SCORES表的"SCORE"列,然后单击"!"按钮,显示视图结果,如下图所示:单击保存按钮,将视图保存为V_SCORES,单击确定.2.用查询分析器建立一个基于学生表、班级表的学生视图(V_STUDENTS),包括学号、姓名、班级、系,SQL语句如下:CREATE VIEW dbo.V_STUDENTSASSELECT dbo.U_STUDENTS.ID, dbo.U_,dbo.U_CLASSES.CLASS,dbo.U_CLASSES.DEPARTMENTFROM dbo.U_STUDENTS INNER JOINdbo.U_CLASSES ON dbo.U_STUDENTS.CLASS_ID = dbo.U_CLASSES.ID3.自己写一个SQL语句建立一个基于课程表的视图(V_COURSES),要求显示课程编号.课程名、学分。

数据库的完整性实验报告

数据库的完整性实验报告

数据库的完整性实验报告数据库的完整性实验报告引言:数据库的完整性是指数据库中存储的数据必须满足预定的一致性要求,包括实体完整性、域完整性、参照完整性和用户定义的完整性。

本实验旨在通过设计一个简单的数据库,并通过实际操作验证其完整性。

一、实验目的本实验的目的是通过设计和操作数据库,了解数据库的完整性概念,并掌握如何保证数据的完整性。

二、实验环境本实验使用MySQL数据库管理系统,并在Windows操作系统上进行实验。

三、实验步骤1. 创建数据库首先,我们需要创建一个数据库来存储我们的数据。

在MySQL中,可以使用以下命令创建一个新的数据库:```CREATE DATABASE integrity;```2. 创建数据表接下来,我们需要创建一个数据表来存储我们的数据。

假设我们要创建一个学生信息表,包括学生的学号、姓名和年龄。

可以使用以下命令创建该表:```USE integrity;CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT);```3. 插入数据现在,我们可以向刚刚创建的数据表中插入一些数据。

例如,我们可以插入几个学生的信息:```INSERT INTO students (id, name, age) VALUES (1, '张三', 20);INSERT INTO students (id, name, age) VALUES (2, '李四', 22);INSERT INTO students (id, name, age) VALUES (3, '王五', 21);```4. 实体完整性实体完整性是指每个实体都必须具有一个唯一的标识符。

在我们的学生信息表中,学生的学号是唯一的标识符。

为了保证实体完整性,我们可以在创建表时使用PRIMARY KEY约束来定义学号为主键:```CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT);```这样,如果有重复的学号插入到表中,系统会报错并拒绝插入。

实验五 数据库完整性与安全性实验

实验五   数据库完整性与安全性实验

实验五数据库完整性与安全性实验1、实验目的1.通过对完整性规则的定义实现,熟悉了解kingbase中完整性保证的规则和实现方法,加深对数据完整性的理解。

2.通过对安全性相关内容的定义,熟悉了解kingbase中安全性的内容和实现方法,加深对数据库安全性的理解2、实验环境操作系统:Microsoft Windows 7旗舰版(32位)。

数据库版本:MySQL 6.23、实验内容3.1完整性实验:(1)分别定义学生数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束;在create table 时已经定义了各个基表的主键。

因此,首先对每个基表删除主键,再添加主键。

实现实体完整性约束。

如下图。

删除主键:添加主键:sc表中的cno和sno分别是course表和student表的外关键字。

下图为给sc表添加student和course的外键,实现参照完整性约束。

alter table sc add constraint fk_student foreign key(sno) references student(sno);alter table sc add constraint fk_course foreign key(cno) references course(cno);主键和外键均添加成功,输入show create table 命令来查看各基表信息。

(2)分别向学生表、课程表插入具有相同学号和相同课程编号的学生数据和课程数据,验证其实体完整性约束;向课程表中插入课程号为C01的课程。

向学生表中插入学号为30201的学生。

由上面两个实验来看,分别对student和course表插入具有相同学号和相同课程号的学生信息和课程信息,都显示sql语句错误信息为:Duplicate entry *** for key ‘PRIMARY’。

验证了实体完整性约束。

(3)向学生选课表中插入一条数据,课程编号是课程表中没有的,验证参照完整性约束;插入成绩信息是学号为31428(student中存在),课程号为C07(course中不存在)的学生成绩信息。

数据库完整性约束的使用与实践

数据库完整性约束的使用与实践

数据库完整性约束的使用与实践导言:数据库完整性约束是数据库设计和管理中非常重要的一部分。

它可以保证数据的正确性、合法性和一致性,防止数据被修改、删除或插入一些不符合规定的值。

在本文中,将探讨数据库完整性约束的类型和使用方法,并且通过实例进行实践和演示。

一、实体完整性约束实体完整性约束是保证表中每条记录都有一个唯一的标识,也就是主键。

主键是一个唯一的、非空的列,可以单独作为表中一行的识别符。

例如,在一个学生信息表中,学号可以作为主键,以确保每个学生都有独一无二的标识。

通过添加主键约束,可以防止重复记录的插入和修改。

二、参照完整性约束参照完整性约束用于保证关系型数据库中表之间的一致性。

它确保外键只能引用已存在的主键值。

外键是一个列,用于联系两个表中的数据。

例如,学生表和课程表之间可以通过学号和课程号建立联系。

当试图插入或修改一个外键值时,参照完整性约束会检查关联的主键值是否存在,如果不存在,就会拒绝该操作。

三、域完整性约束域完整性约束定义了列所能包含的值的范围和规则。

它确保每个列都只包含合法的值,并且符合预先定义的规则。

例如,一个年龄列可能需要限制在1到100之间的整数。

通过指定域完整性约束,可以防止插入超出范围的值,并保证数据的有效性和精确性。

四、检查完整性约束检查完整性约束允许数据库管理员指定一定的条件,以确保列的值满足特定的要求。

这些条件可以是简单的比较运算符,也可以是复杂的逻辑表达式。

例如,一个成绩表中的分数列可能需要大于等于0小于等于100。

通过添加检查完整性约束,可以方便地对输入的值进行验证,并提醒用户输入合法的数据。

五、实践演示为了更好地理解数据库完整性约束的使用和实践,我们以一个在线商城的数据库为例进行演示。

假设我们有以下四个表:1. 顾客表(Customer):顾客的ID、姓名、邮箱和电话号码。

2. 订单表(Order):订单的ID、日期、顾客ID和总金额。

3. 产品表(Product):产品的ID、名称和价格。

数据库完整性实验报告

数据库完整性实验报告

数据库完整性实验报告引言数据库完整性是数据库管理系统中的一个重要概念,用于确保数据库中数据的准确性、有效性和一致性。

本实验旨在通过设计和实现一系列完整性约束,来验证数据库完整性的实际应用。

实验目标本实验的目标是设计并实现以下几种完整性约束:1.实体完整性约束2.参照完整性约束3.用户自定义完整性约束实验环境本实验使用了以下工具和环境:•数据库管理系统:MySQL•编程语言:Python•集成开发环境:Jupyter Notebook实验步骤步骤一:数据库设计首先,我们需要设计一个符合实验需求的数据库。

我们选择一个简单的学生管理系统作为示例,包含以下两个实体:1.学生(Student):包含学生的学号、姓名和年龄。

2.课程(Course):包含课程的课程号、课程名和学分。

步骤二:实体完整性约束实体完整性约束用于保证每个实体在数据库中都有唯一的标识。

在本实验中,我们将为学生实体添加一个主键约束,保证每个学生的学号是唯一的。

CREATE TABLE Student (id INT PRIMARY KEY,name VARCHAR(50),age INT);步骤三:参照完整性约束参照完整性约束用于保证关系数据库中的引用一致性。

在本实验中,我们将为课程实体添加一个外键约束,引用学生实体的主键。

CREATE TABLE Course (id INT PRIMARY KEY,name VARCHAR(50),credits INT,student_id INT,FOREIGN KEY (student_id) REFERENCES Student(id));步骤四:用户自定义完整性约束用户自定义完整性约束是根据具体业务需求自定义的约束条件。

在本实验中,我们将为课程实体添加一个自定义约束,保证学分必须大于等于0。

ALTER TABLE CourseADD CONSTRAINT chk_credits CHECK (credits >=0);实验结果通过以上步骤,我们已经成功设计并实现了实体完整性约束、参照完整性约束和用户自定义完整性约束。

数据完整性约束(1)——实体完整性、参照完整性

数据完整性约束(1)——实体完整性、参照完整性

数据完整性约束(1)——实体完整性、参照完整性⼀.数据完整性的分类在关系模型中,提供了实体完整性,参照完整性,⽤户定义完整性。

⼆.实体完整性2.1什么是实体?实体是⼀个数据对象,指的是客观存在并可以相互区分的事物,⽐如学⽣,⽼师等。

⼀个实体在数据库中对应的是⼀条记录。

2.2实体完整性在MySQL中实现实体完整性在MySQL中的实现是通过主键约束和候选键约束实现的。

2.2.1主键约束⾸先,我们来了解⼀下主键是什么:主键是表中的某⼀列或者多个列的组合。

多个列就是复合主键。

在MySQL中的主键必须保证⼀下⼏个要求:1.⼀个表只能有⼀个主键,主键可以复合但是只有⼀个。

2.唯⼀性,主键的值在⼀张表⾥⾯是不能重复是唯⼀的,⽽且不能为空。

3.最⼩化原则,当⼀个复合主键删除掉复合的某⼀⾏后如果这个主键还是复合的,那么就是代表原来那个复合主键没有满⾜最⼩化原则。

2.2.2实现主键使⽤关键字:primary key⽅式⼀:单列主键create table tb(tb_pk int primary key);⽅式⼆:复合主键create table tb(tb_id int ,tb_name varchar(10),primary key (tb_id,tb_name));2.2.3候选键约束如果⼀张表中的某⼀个列可以唯⼀标识这张表,⼜不含其他多于的属性,那么他就是⼀个候选键。

⽐如学⽣的学号。

同样的候选键也是⾮空并且唯⼀值,候选键也⽀持复合。

2.2.4候选键与主键键表中主键只有⼀个但是候选键可以拥有多。

两者都会创建索引,主键是priamry key索引,但是候选键是unique索引2.2.5实现候选键使⽤关键字unique:create table tb(tb_id int ,tb_name varchar(10),unique(tb_id,tb_name));三.参照完整性在现实世界中存在多个对应的关系,那么这个对应关系就是参照完整性,也就是MySQL中的外键。

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

实验五指导5.1 实体完整性1)在数据库School中建立表Stu_Union,进行主键约束,在没有违反实体完整性的前提下插入并更新一条记录use Schoolcreate table Stu_Union(Sno char(8)not null unique,Sname char(8),Ssex char(1),Sage int,constraint PK_Stu_Union primary key(Sno))insert Stu_Union values('456','小二','M','22')update Stu_Union set Sno=''WHERE Sage='22'update Stu_Union set Sno='789'where Sname='小二'select*from Stu_Union2)演示违反实体完整性的插入操作use Schoolinsert Stu_Union values('789','小三','M','23')3)演示违反实体完整性的更新操作use Schoolupdate Stu_Union set Sno=NULL where Sno='789'4)演示事务的处理,包括事务的建立,处理以及出错时的事务回滚,演示事务处理和批处理的区别。

提示:SQL2005相关语句为BEGIN TRANROLLBACK TRANCOMMIT TRAN可以这样演示:新建一个包含两条语句的事务,使第一条成功而第二条失败,然后查看整个事务是否回滚。

重要提示:SQL默认只回滚出错的语句,要回滚整个事务,需要预先执行以下语句:SET XACT_ABORT ON事务的建立use Schoolset xact_abort onbegin transaction t1insert into Stu_Union values('001','张三','M','22')insert into Stu_Union values('002','李四','F','24')insert into Stu_Union values('003','李四','F','24')select*from Stu_Unioncommit transaction t1处理以及出错时的回滚use Schoolset xact_abort onbegin transaction t2insert into Stu_Union values('004','王五','M','23')select*from Stu_Unioninsert into Stu_Union values('789','钱六','F','21')commit transaction t2use Schoolselect*from Stu_Union5)通过建立Scholarship表,插入一些数据。

演示当与现有的数据环境不等时,无法建立实体完整性以及参照完整性。

提示:即演示不能为表Scholarship生成主键和外键的情况。

1)建立并插入数据use Schoolcreate table Scholarship(M_id varchar(10),Stu_id char(8),R_Money int,)insert into Scholarship values ('M001','004','2000')insert into Scholarship values ('M002','005','3000')select*from Scholarship2)相关演示use Schoolalter table Scholarship addconsraint PK_Scholarship primary key(M_id)3)无法建立use Schoolalter table Scholarship addconstraint FK_Scholarship foreign key(Stu_id)referencesStudents(Sno)5.2参照完整性1)为演示参照完整性,建立表Course,令cno为其主键,并在Stu_Union中插入数据。

为下面的实验步骤做预先准备。

create table Course(Cno CHAR(4)NOT NULL UNIQUE,Cname V ARCHAR(50)NOT NULL,Cpoints INT,CONSTRAINT PK PRIMARY KEY(Cno));insert Course values('C001','C++',2);insert Course values('C002','Java',3);2)建立表sc,另sno和cno分别为参照Stu_Union表以及Course表的外键,设定为级连删除,并令(sno, cno)为其主键。

在不违反参照完整性的前提下,插入数据。

use Schoolcreate table SC(Sno CHAR(8),Cno CHAR(4),Scredit INT,constraint PK_SC primary key(Sno,Cno),constraint FK_SC_Sno foreign key(Sno)references Stu_Union(Sno)on delete cascade, constraint FK_SC_Cno foreign key(Cno)references Course(Cno)on delete cascade);INSERT INTO SC V ALUES('002','C001',2);INSERT INTO SC V ALUES ('002','C002',2);INSERT INTO SC V ALUES ('001','C001',2);INSERT INTO SC V ALUES ('001','C002',2);SELECT*FROM SC;3)演示违反参照完整性的插入数据use Schoolinsert into SC values('099','C099',2)4)在Stu_Union中删除数据,演示级连删除。

use Schooldelete from Stu_Union where Sno='001'select*from SC;5)Course中删除数据,演示级连删除。

use Schooldelete from Course where Cno='C002'select*from SC;6)为了演示多重级连删除,建立Stu_Card表,令stu_id为参照Stu_Union表的外键,令card_id 为其主键,并插入数据。

use Schoolcreate table Stu_Card(Card_id CHAR(14),Sno CHAR(3),Constraint PK_Stu_Card primary key(Card_id),Constraint FK_Stu_Card_Sno foreign key(Sno)references Students(Sno)on delete cascade)insert into Stu_Card values('05212567','003')insert into Stu_Card values('05212222','789')select*from Stu_card;7)为了演示多重级连删除,建立ICBC_Card表,令stu_card_id为参照Stu_Card表的外键,令bank_id为其主键,并插入数据。

use Schoolcreate table ICBC_Card(Bank_id CHAR(20),Stu_card_id CHAR(14),Restored_money DECIMAL(10,2),constraint PK_ICBC_Card PRIMARY KEY(Bank_id),constraint FK_ICBC_Card_Stu_id FOREIGN KEY(Stu_card_id)references Stu_card(card_id)on delete cascade)insert into ICBC_Card values('9558844022312','05212567',15000)insert into ICBC_Card values('9558844023645','05212222',50000)select*from ICBC_Card;8)通过删除stu_union表中的一条记录,演示三个表的多重级连删除。

delete Stu_Union where Sno='003'select*from Stu_card;select*from ICBC_Card;9)演示事务中进行多重级连删除失败的处理。

修改ICBC_Card表的外键属性,使其变为On delete No action, 演示事务中通过删除stu_union表中的一条记录,多重级连删除失败,整个事务回滚到事务的初始状态。

1)修改alter table ICBC_Carddrop constraint FK_ICBC_Card_Stu_id;alter table ICBC_CardADD constraint FK_ICBC_Card_Stu_id FOREIGN KEY (Stu_card_id)references Stu_card(Card_id)on delete no action;2)删除delete Stu_Union where Sno='002'select*from Stu_card;select*from ICBC_Carddelete Stu_Union where Sno='789'select*from Stu_card;select*from ICBC_Card5.3索引的建立和作用1.实验目的学会在SQL SERVER中建立索引通过本实验体会覆盖索引的作用,在以后的实践中,能适时地使用覆盖索引来提高数据库的性能。

相关文档
最新文档