湖南大学数据库实验四-完整性约束、视图、存储过程和数据安全
实验四 数据库约束实验

实验四数据库约束实验实验四数据库约束实验实验四:数据库约束实验一、实验目的(1)了解数据库完整性约束的概念。
(2)掌握SQL server的完整性约束技术(3)了解sqlserver的违反完整性约束的处理措施。
二、实验内容(1)理解域完整性、实体完整性、引用完整性和用户定义完整性的含义(2)定义和管理主键约束、外键约束和唯一性约束(3)定义和管理检查约束、默认值约束和允许空值约束。
3.实验指导数据库完整性约束包括域完整性、实体完整性、参照完整性和用户定义完整性约束,其中,域完整性约束、实体完整性和参照完整性约束是关系模型必须满足的完整性约束条件。
域完整性约束是保证数据库字段取值的合理性约束。
在SQL server中,可以通过建立“约束”和其他措施来实现数据完整性约束。
约束包括五种类型:主键约束、唯一性约束、检查约束、默认值约束、外键约束和外键约束。
(1)主键约束主键约束指在表中定义一个主键来唯一确定表中每一行数据的标识符对于主键约束,一些数据库具有不同的规则。
实验4.1主键的设置和管理(1)在ssms窗口中设置和修改主键(2)使用T-SQL语句定义和修改主键实验4.2sql处境字段intidentity(1,1)在选择查询期间添加列实验4.3唯一性约束的设置与删除用t-sql语句定义或修改唯一性约束实验4.4创建和管理检查约束用createtable语句中创建检查约束创建表时可以创建检查约束。
以下是一个简单的createtable脚本,包括创建检查约束的代码:实验4.5外键的定义和管理1、在定义数据表时定义外键2.如果在定义表SC时没有定义外键,则可以添加表SC的外键约束fk_u_SnO,表SC 中的SnO受SQL Server主键约束-表s中的SnO3、当外键没有用时,可以删除它。
例如删除sc表的外键fk_s_sno。
数据库实验三:创建视图、存储过程和实现数据安全_mysql

实验三:完整性约束、视图、存储过程和数据安全[目的和意义]掌握创建各种完整性约束的方法;掌握创建和使用视图、存储过程和索引的方法;掌握实现数据安全的基本方法;掌握数据库的基本备份和恢复技术。
[实验内容]本实验在mysql数据库平台上进行操作,实验中的各种数据都来自于实验二中的各个表。
实验主要内容如下:1.学习创建完整性约束的方法。
2.学习创建视图、存储过程和索引的方法。
3.学习利用用户管理和视图实现数据安全。
4.学习mysql数据库的基本备份和恢复技术。
[实验步骤]1 完整性约束1.1 实体完整性约束主键一定是非空的,而且具有唯一性,即不能重复。
能够唯一标识实体,保证实体完整性。
虽然,上面已经成功创建了主键,但是,我们还是要学习一下主键的写法。
第一种:在建表的时候就加上主键:还是以上面course表的创建为例:CREATE TABLE course (cno V ARCHAR(10) NOT NULL,dno CHAR(8) NOT NULL,cname V ARCHAR(20) NOT NULL,hours INTEGER NOT NULL,term INTEGER NOT NULL,credit INTEGER NOT NULL,CONSTRAINT pk_course PRIMARY KEY (cno));其中最后一句话就是将cno设为主键。
如果主键包含多个字段,可以在括号内添加所包含字段名,如取cno和dno为主键,则语句为:CONSTRAINTpk_course PRIMARY KEY(cno,dno)。
第二种:若建表的时候没有将cno设为主键,表建立成功以后,可以加上主键约束:ALTER TABLE course ADD CONSTRAINT pk_course PRIMARY KEY(cno) ;1.2 参照完整性约束建立外键:例如,在course表中建立和department表之间的外键,语句如下:ALTER TABLE courseADD CONSTRAINT fk_course_departmen_departme FOREIGN KEY (dno) REFERENCES department (dno);在student表中建立和department表之间的外键,语句如下:ALTER TABLE studentADD CONSTRAINT fk_student_departmen_departme FOREIGN KEY (dno) REFERENCES department (dno);1.3 业务规则约束有时候,不同系统会有一些特定的业务规则;例如这里,要求在删除teacher表之前一定要先删除teacher_course与student_course_teacher中的相关信息,这里,我们用触发器实现一下:DELIMITER //#修改分隔符CREATE TRIGGER tri_del_teacherAFTER DELETE ON teacherFOR EACH ROWBEGINDELETE FROM teacher_courseWHERE tno=old.tno;DELETE FROM student_course_teacherWHERE tno=old.tno;END //DELIMITER ; #修改回原分隔符建立成功以后,如果我们在teacher表中删除老师编号为'2004-213'的老师的信息,那么teacher_course和student_course_teacher两表中包含此老师信息的相关数据都会删除掉(慎用!)。
数据库中的数据完整性约束与控制

数据库中的数据完整性约束与控制在数据库管理系统中,数据的完整性是非常重要的一种特性。
它确保数据库中存储的数据的准确性、有效性和一致性。
为了实现数据的完整性,数据库管理系统提供了一系列的数据完整性约束与控制。
一、数据完整性约束的定义数据完整性约束是一种规则或限制,用于确保数据库中的数据满足指定的条件。
数据完整性约束可以应用于表、列、或者整个数据库。
1. 实体完整性约束(entity integrity constraint)实体完整性约束是保证主键的一致性和唯一性的约束条件。
它规定了每个实体(表)必须具有一个主键,并且该主键值不能为NULL或为空值。
实体完整性约束可以通过主键、唯一索引和非为空值约束来实现。
2. 参照完整性约束(referential integrity constraint)参照完整性约束用于确保数据库中关系表之间的参照一致性。
通过参照完整性约束,确保了外键的一致性和有效性。
当我们在一个表中创建外键时,参照完整性约束确保外键的值在被引用表(主表)中必须存在,否则将引发错误。
3. 域完整性约束(domain integrity constraint)域完整性约束用于限制数据类型和范围。
通常,它们被应用于表的列上,以确保只有指定的数据类型可以存储在这些列中。
例如,我们可以将域完整性约束应用于限制日期列的取值范围或限制字符串列的长度。
4. 用户定义完整性约束(user-defined integrity constraint)用户定义完整性约束允许用户根据具体的需求定义其他的约束条件,以保证数据的一致性和正确性。
这些约束可以通过触发器、存储过程等方式来实现。
二、数据完整性约束的控制方法为了确保数据库中的数据完整性,我们需要采取一些控制方法。
1. 触发器(triggers)触发器是一段存储在数据库中的特殊程序,它在特定的数据库事件(例如插入、更新或删除操作)发生时自动执行。
可以在触发器中编写逻辑,用于在数据被修改之前或之后进行自定义操作,以确保数据满足约束条件。
数据库完整性与安全性实验

1.实验五数据库完整性与安全性实验1.1 实验目的1.通过对完整性规则的定义实现,熟悉了解Mysql中完整性保证的规则和实现方法,加深对数据完整性的理解。
2.通过对安全性相关内容的定义,熟悉了解Mysql中安全性的内容和实现方法,加深对数据库安全性的理解1.2 实验内容1.2.1 完整性实验(1)分别定义学生数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束;(2)分别向学生表、课程表插入具有相同学号和相同课程编号的学生数据和课程数据,验证其实体完整性约束;(3)向学生选课表中插入一条数据,课程编号是课程表中没有的,验证参照完整性约束;(4)删除学生表中的所有数据,验证参照完整性约束;(5)定义存储过程,完成查询某个学生的选课情况,并执行。
(6)定义触发器,当向学生表插入新的一条记录时,将所有学生出生日期加1;并对其进行测试。
(7)用sql完成以上操作。
1.2.2 安全性实验(1)定义一新的登陆帐号、数据库用户,并授予其访问学生数据库的读权限;(2)分别用sa用户和新定义的用户访问学生数据库,并对其中的学生表数据进行修改;(3)再次用此用户访问学生数据库,并对其中的学生表数据进行修改。
(4)用SQL语句分别完成以上内容。
1.3 实验环境Window8操作系统Mysql 8.0版本数据库Mysql workbench 8.0可视化工具Mysql命令行编辑器1.4 实验步骤及结果分析1.4.1 完整性1.4.1.1 分别定义学生数据库中各基表的主键、外键,实现实体完整性约束和参照完整性约束1.首先因为在之前创建表的时候定义了主键,因此,我们需要先将所有表的主键撤销掉,然后重新创建主键。
Mysql语句(删除主键):alter table student drop primary key;alter table course drop primary key;alter table sc drop primary key;2.重新创建主键Mysql语句(创建主键):alter table student add primary key(sno);alter table course add primary key(cno);alter table sc add primary key(sno,cno);3.到此,我们已经重新添加了各表的主键,接下来我们为SC表添加外键。
数据库实验报告 数据控制(完整性部分) 实验四

题目:实验4 数据控制(完整性部分)姓名:* * * 日期:2012年4月26日一、实验目的熟悉通过SQL对数据进行完整性控制。
完成作业的上机练习。
二、实验平台在实验1中安装的RDBMS及其交互工具。
三、实验内容和要求使用SQL对数据进行完整性控制(三类完整性、check短语、constraint字句、触发器)。
用实验证实,当操作违反了完整性约束条件时,系统是如何处理的。
根据以下要求认真填写实验报告,记录所有的实验用例。
四、实验报告1、三类完整性,check短语。
关系模型的实体完整性在create table 中用primary key 定义。
定义主码的方法分为定义为列级约束条件和定义为表级约束条件两种。
对多个属性构成的码只能用表级约束条件。
习题5的第6题,要求定义实体完整性(主码)、参照完整性(外码)、check语句,用户定义的完整性(not null)。
代码如下:create table 职工( Dno numeric(4) primary key,Dname char(20) unique,Dbossname char(20),Dnum numeric(4));create table职工( Eplno smallint primary key,Eplname char(20) not null,Eplage smallint check (Eplage<=60),job char(9),Sal numeric(7,2),Dno numeric(4),foreign key(Dno)references部门(Dno) );2、constraint 字句完整性约束命名字句:create table student(SNO NUMERIC(5)CONSTRAINT C1 CHECK (SNO BETWEEN 90000 AND 99999), SNAME V ARCHAR(20)CONSTRAINT C2 NOT NULL,SAGE NUMERIC(3)CONSTRAINT C3 CHECK (SAGE < 30),SSEX V ARCHAR(2)CONSTRAINT C4 CHECK (SSEX IN ('男','女')), CONSTRAINT StudentKey PRIMARY KEY(SNO));1、触发器(1)创建触发器:(after 行级触发器)create trigger insert_or_update_Sal on 职工after insert as update 职工set Sal=12000 where (job='软件工程师')and (Sal<12000)激活触发器:insertinto职工values('24','小露','21','软件工程师','10000','8')(2)插入触发器:create trigger insert_0table on 职工for insertasdeclare @Eplno smallintselect @Eplno=Eplno from insertedupdate 职工set job='软件工程师' where Eplno=@Eplno激活触发器如下图所示:(3)创建触发器:(instead 表级触发器)create trigger J_updateon Jinstead of updateasbeginraiserror('J表的数据不能被修改!',16,10)end激活触发器:update Jset Jname='大众'where Jno='J1'执行顺序为:执行SQL“update”语句—>执行触发器删除触发器:代码:drop trigger J_update;执行结果如下:3、违反完整性约束条件时,系统处理如下:4、实验小结:(1) 遇到的问题:创建before行级触发器时出现问题create trigger insert_or_update_Salbefore insert or update on 职工for each rowas beginif(new.job='软件工程师')and (new.Sal<12000) then new.Sal:= 12000;end if;end;解决方案:待解决??。
数据库的四种类型的完整性约束

数据库的四种类型的完整性约束数据完整性:是指存储在数据库中的所有数据值均正确的状态。
四种类型的完整性约束:1、实体完整性约束:表中的每⼀⾏数据都反映不同的实体,不能存在相同的数据⾏.通过索引.唯⼀约束,主键约束或标识列属性,可以⽤来实现表的实体完整性.索引:将⽂献中具有检索意义的事项(可以是⼈名、地名、词语、概念、或其他事项)按照⼀定⽅式有序编排起来,以供检索的⼯具书。
数据库索引好⽐是⼀本书前⾯的⽬录,能加快数据库的查询速度。
例如这样⼀个查询:select * from table1 where id=44。
如果没有索引,必须遍历整个表,直到ID等于44的这⼀⾏被找到为⽌;有了索引之后(必须是在ID这⼀列上建⽴的索引),直接在索引⾥⾯找44(也就是在ID这⼀列找),就可以得知这⼀⾏的位置,也就是找到了这⼀⾏。
可见,索引是⽤来定位的。
唯⼀约束:⽐如⼀张表的学⽣姓名设置了唯⼀约束,那么学⽣的姓名就是不能重复的,只能是唯⼀的唯⼀约束保证在⼀个字段或者⼀组字段⾥地数据与表中其它⾏的数据相⽐是唯⼀的附上与主键约束的区别,以更好理解创建唯⼀约束可确保在未参与主键的特定列中不输⼊重复值。
尽管唯⼀约束和主键都强制唯⼀性,但如果情况如下,则应向表附加唯⼀约束⽽不是主键约束:希望在某⼀列或某⼀组列中强制唯⼀性。
您可以向表附加多个唯⼀约束,但只能向表附加⼀个主键约束。
希望在允许空值的列中强制唯⼀性。
您可以向允许空值的列附加唯⼀约束,但只能向不允许空值的列附加主键约束。
当向允许空值的列附加唯⼀约束时,请确保在所约束的列中最多只有⼀⾏包含空值。
2、域完整性约束:指给定列的输⼊有效性通过限制数据类型,检查约束,输⼊格式,外键约束,默认值,⾮空约束等多种⽅法,可以⽤来实现表的域完整性.3、参照完整性约束:在输⼊或删除数据⾏时,引⽤完性约束⽤来保持表之间已定义的关系4:、⽤户定义的完整性约束:⽤来定义特定的规则,例如,向⽤户信息表中插⼊⼀个⽤户记录时,要求通过⾝份证编号来检查另外⼀个数据库中是否存在该⽤户,并且该⽤户的信誉度是否满⾜要求等.如果不满⾜要求则不能够插⼊,这个时候就需要使⽤数据库的规则存储过程或者触发器来进⾏约束。
数据库完整性约束的使用与实践

数据库完整性约束的使用与实践导言:数据库完整性约束是数据库设计和管理中非常重要的一部分。
它可以保证数据的正确性、合法性和一致性,防止数据被修改、删除或插入一些不符合规定的值。
在本文中,将探讨数据库完整性约束的类型和使用方法,并且通过实例进行实践和演示。
一、实体完整性约束实体完整性约束是保证表中每条记录都有一个唯一的标识,也就是主键。
主键是一个唯一的、非空的列,可以单独作为表中一行的识别符。
例如,在一个学生信息表中,学号可以作为主键,以确保每个学生都有独一无二的标识。
通过添加主键约束,可以防止重复记录的插入和修改。
二、参照完整性约束参照完整性约束用于保证关系型数据库中表之间的一致性。
它确保外键只能引用已存在的主键值。
外键是一个列,用于联系两个表中的数据。
例如,学生表和课程表之间可以通过学号和课程号建立联系。
当试图插入或修改一个外键值时,参照完整性约束会检查关联的主键值是否存在,如果不存在,就会拒绝该操作。
三、域完整性约束域完整性约束定义了列所能包含的值的范围和规则。
它确保每个列都只包含合法的值,并且符合预先定义的规则。
例如,一个年龄列可能需要限制在1到100之间的整数。
通过指定域完整性约束,可以防止插入超出范围的值,并保证数据的有效性和精确性。
四、检查完整性约束检查完整性约束允许数据库管理员指定一定的条件,以确保列的值满足特定的要求。
这些条件可以是简单的比较运算符,也可以是复杂的逻辑表达式。
例如,一个成绩表中的分数列可能需要大于等于0小于等于100。
通过添加检查完整性约束,可以方便地对输入的值进行验证,并提醒用户输入合法的数据。
五、实践演示为了更好地理解数据库完整性约束的使用和实践,我们以一个在线商城的数据库为例进行演示。
假设我们有以下四个表:1. 顾客表(Customer):顾客的ID、姓名、邮箱和电话号码。
2. 订单表(Order):订单的ID、日期、顾客ID和总金额。
3. 产品表(Product):产品的ID、名称和价格。
数据库约束与完整性

数据库约束与完整性数据库约束是指在关系数据库中对数据进行限制和规范的一种机制。
通过定义不同类型的约束条件,可以确保数据库中的数据满足特定的要求,提高数据的质量和一致性。
本文将介绍数据库约束的概念和常见的约束类型,以及如何使用约束来保证数据的完整性。
一、数据库约束的概念在关系数据库中,约束是一种用于限制和规范数据的方法。
它可以定义在表的列级别或表级别上,用于限制数据的取值范围、关系和完整性等。
通过约束,可以确保数据的准确性和一致性,有效地防止错误数据的插入、更新和删除。
常见的约束类型包括主键约束、外键约束、唯一约束和非空约束等。
二、主键约束主键约束是指在关系数据库中标识唯一记录的一列或一组列。
主键是用于保证数据完整性和一致性的关键因素之一。
主键约束要求主键列的值不重复且不能为空。
在创建表时,可以通过定义主键约束来指定主键列。
主键约束可以确保每个记录都有唯一的标识,方便数据的查询和管理。
三、外键约束外键约束是指在关系数据库中建立不同表之间关系的一种约束类型。
外键约束用于定义一个表中的列与另一个表中的主键列之间的关系。
通过外键约束,可以实现表与表之间的数据一致性和完整性。
外键约束可以限制插入、更新和删除操作,保证数据的一致性。
外键约束还可以用于实现表之间的数据关联和数据集成。
四、唯一约束唯一约束是指在关系数据库中保证列或一组列的值唯一的一种约束类型。
唯一约束要求列的值在整个表中是唯一的,并禁止重复值的插入和更新。
通过唯一约束,可以保证数据的一致性和唯一性。
唯一约束还可以用于限制某些列的取值范围,并提高查询效率和数据管理的方便性。
五、非空约束非空约束是指在关系数据库中限制某列的值不能为空的一种约束类型。
非空约束要求列的值不能为空,禁止插入和更新空值。
通过非空约束,可以确保数据的完整性和一致性。
非空约束还可以用于限制某些列必须填写的情况,提高数据的质量和可用性。
六、完整性约束完整性约束是指在关系数据库中保证数据完整性的一种约束机制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南大学数据库实验四-完整性约束、视图、存储过程和数据安全
实验四完整性约束、视图、存储过程和数据安全
实验目的:
1、掌握创建各种实体完整性约束的方法。
2、掌握创建和使用视图、存储过程和索引的方法。
3、掌握视图实现数据安全的基本方法。
4、掌握数据库的基本备份和恢复技术。
实验内容:
本实验在ORACLE数据库平台上进行操作,ORACLE数据库的基本操作请参考实验二,本实验中的各种数据都来自于实验三中的各个表。
实验主要内容如下:
1、学习创建四类完整性约束的方法。
2、学习创建视图、存储过程和索引的方法。
3、学习利用用户管理,角色管理,以及利用视图实现数据安全。
4、学习ORACLE数据库的基本备份和恢复技术。
实验过程:
1.实体完整性约束
方法一:
create table course (
cno varchar(10) not null,
dno char(8) not null,
cname varchar(20) not null,
hours number not null,
term number not null,
credit number not null,
constraint pk_course primary key (cno)
);
方法二:
alter table course add constraint pk_course primary key(cno) ;
2.参照完整性约束
alter table COURSE
add constraint FK_COURSE_DEPARTMEN_DEPARTME foreign key (dno)
references department (dno);
3.域约束
前面建表时用的数据类型,NOT NULL等都属于域约束;
alter table student add constraint chk_sex check (sex in ('男','女'));
alter table student modify sex default '男';
alter table student_course_teacher add constraint chk_score check (score>=0 AND score<=100);
4.业务规则约束
用触发器实现一下:
create or replace trigger tri_del_teacher
after delete on teacher
for each row
declare
-- local variables here
begin
delete from teacher_course
where tno=:old.tno;
delete from student_course_teacher
where tno=:old.tno;
end tri_del_teacher;
/
备注:最后面的斜杠“/”不能少。
5.视图的创建和查询
create view myview_course as select s.sno 学号, sname
姓名, classno 班级
from student s,
teacher t,
course c,
student_course_teacher sct
where t.tname ='杨金民'
and ame ='数据库系统'
and sct.semester = '2010/01'
and s.sno = sct.sno
and t.tno = sct.tno
and o = o;
6.存储过程
创建存储过程:
create or replace procedure myproc(cname1 varchar2,semester1 varchar2)
as
classno1 student.classno%type;
avg1 integer;
begin
select classno, avg(score)
into classno1,avg1
from student s, course c, student_course_teacher sct
where ame = cname1
and sct.semester =semester1
and s.sno = sct.sno
and o = o
and rownum=1
group by classno;
dbms_output.put_line('班级编号:'||classno1||' '||'平均分:'||avg1);
end;
/
创建成功以后,使用存储过程:
CALL myproc('数据库系统','2010/01');
7.索引
create index my_student_idx on student(sex); ----对表中的SEX建立索引
8.用户管理
create user test identified by tiger; -----创建
grant connect to test; -----连接
GRANT {privilegeList | ALL PRIVILEGES}---授权
ON ObjectName
TO {AuthorizationIdList | PUBLIC}
[WITH GRANT OPTION]
9.角色管理
create role myrole; ------创建
grant select on maqiang.teacher_course to myrole; ----授权
grant select on maqiang.student to myrole;
grant myrole to test; -----使用户具有mvrole的
权限
select * from maqiang.teacher_course; ---验证
是否具有该权限
select * from maqiang.student;
revoke myrole from test; ---取消角色权限
10.视图
create view myview_student as select sno,sname from maqiang.student; ----创建
grant select on myview_student to test; -----授
权
11.数据备份
将student_course_teacher表进行备份和恢复。
缓冲区大小:可以更改,这里就用的默认值;
导出文件:输入导出路径,文件名后缀.dmp;
用户,表:这里可以选择是导出用户下所有的,还是选定的表,如果具有管理员权限,则可多一个选项,导出整个数据库。
导出表数据:选择yes的话就会把表的数据也导出,no 的话就只导出表结构,不导出数据;
压缩区:选择yes会进行压缩。
要导出的表或分区:这里填写要导出的表名,本例中就是student_course_teacher,可以看到,成功导出,如果还要导出别的表,接着输入表名,没了的话就直接回车结束。
12.数据恢复
首先:删除表, drop table student_course_teacher;
然后,利用上面的备份文件恢复表student_course_teacher
小结:
通过本次试验,掌握了四类完整性约束的写法,学会创建和使用视图,进一步了解数据安全和数据库的基本备份和恢复技术。