精华内容
下载资源
问答
  • 数据库完整性实验报告

    千次阅读 2019-12-03 13:43:39
    (1)实现数据完整性的概念及实施数据完整性的重要性。 (2)掌握数据完整性的分类。 (3)掌握完整性约束的添加、删除方法。 (4)掌握通用默认值的创建、实施与删除方法。 (5)掌握规则的创建、实施与删除...

    实验六 数据库完整性

    一、实验学时

    2学时

    二、实验目的

    (1)实现数据完整性的概念及实施数据完整性的重要性。
    (2)掌握数据完整性的分类。
    (3)掌握完整性约束的添加、删除方法。
    (4)掌握通用默认值的创建、实施与删除方法。
    (5)掌握规则的创建、实施与删除方法。
    (6)掌握级联删除、级联修改方法。

    三、实验要求

    (1)硬件设备:奔腾II或奔腾II以上计算机,局域网。
    (2)软件环境:WINDOWS 9X/NT、WINDOWS SERVER、WINDOWS XP、WINDOWS 7、SQL SERVER 2000/2005/2008中文版企业版或标准版。
    (3)实验课前预习,课后及时完成实验内容。
    (4)实验过程及记录按题目格式要求填写代码清单。
    四、实验内容
    数据完整性是指数据的正确性、完备性和一致性,是衡量数据库质量好坏的重要标准。
    数据完整性分为以下三类:
    实体完整性:是指保证表中所有的行惟一。由主键约束来实现。
    参照完整性:也叫引用完整性。参照完整性总是保证主关键字(被引用表)和外部关键字(引用表)之间的参照关系。它涉及两个或两个以上表数据的一致性维护。由外键约束来实现。
    用户自定义完整性:是指用户针对某一具体关系数据库的数据必须满足的语义要求。通常由Check约束来实现。
    1.完整性约束的添加、删除
    约束是强制数据完整性的首选方法。约束有6种类型:非空约束、默认值约束、Check约束、主键约束、外键约束、唯一性约束。
    (1)使用企业管理器实施约束
    1)为表Student的Sdept字段即所在系字段,设置默认值约束,默认值取‘CS’。
    添加默认约束的操作步骤:

    删除默认约束的操作步骤:

    2)(若原有约束,请在企业管理器中删除Student表的主键约束)在企业管理器中将Sno重设为主键。(会操作即可,操作步骤可略)
    3)为Student表的Sname字段添加唯一性约束。
    添加唯一性约束操作步骤:

    删除唯一性约束操作步骤:

    4)(若原有约束,请在企业管理器中删除原有的外键约束)在企业管理器中删除SC原有的外键约束,在企业管理器中对Sno,Cno字段设置外键约束,约束名自己取。并允许级联删除与级联更新。
    添加外键约束的操作步骤:

    删除外键约束的操作步骤:

    (2)使用T-SQL语句添加、删除约束(约束名自取,并自行添加或修改某些字段值检验有效性)
    1)为Student表的Sno字段添加一个check约束,使学号满足如下条件:
    a. 学号前四位为2002。
    b. 学号后五位为数字字符。
    T-SQL语句为:
    create table Student
    (Sno char(9) check(Sno like’[2002][0-9][0-9][0-9][0-9][0-9]’));

    2)(若原有约束,请在企业管理器中删除SC表主键约束及外键约束)将SC表中的Sno,Cno字段设置为主键。
    T-SQL语句为:
    alter table SC
    add constraint PK_SC primary key(Sno,Cno)

    3)为SC表中的Sno,Cno添加外键约束,约束名自取;并允许级联删除与级联更新。
    添加外键约束T-SQL语句为:

    alter table SC
    add constraint FK_Sno foreign key(Sno) references Student(Sno)
    on delete cascade on update cascade;
    alter table SC
    add constraint FK_Cno foreign key(Cno) references Course(Cno)
    on delete cascade on update cascade

    验证级联删除与级联更新T-SQL语句:
    (测试实例自编)
    **select from Student
    where Sno=‘200200002’
    select from SC
    where Sno=‘200200001’
    delete from Student
    where Sno=‘200200001’
    select from Student
    where Sno=‘200200001’
    select
    from SC
    where Sno=‘200200001’

    2.通用默认值的实施
    (1)使用企业管理器实现
    1)使用企业管理器中为数据库Stu_Course创建一个默认的年龄,名称自取,值为:19。
    具体步骤如下:

    2)将该默认值绑定到Student表中的Sage列。
    具体步骤如下:

    3)将Sage列上的绑定解除,并在企业管理器中删除该默认值。
    具体步骤如下:

    若未解除绑定,能否删除默认值?

    (2)使用T-SQL语句实施默认值
    1)为数据库Stu_Course创建一个关于性别的默认值,名称自取,值为“女”。
    T-SQL语句为:
    create default about_sex as '女’

    2)将该默认值绑定到Student表中的Ssex字段(原有的约束请删除)
    T-SQL语句:
    sp_bindefault about_sex ,"Student.Ssex"

    3)解除表Student的Ssex列的默认值绑定,并删除该默认值。
    T-SQL语句:
    sp_unbindefault ‘Student.Ssex’
    drop default about_sex

    3.规则的实施
    (1)使用企业管理器实现
    1)使用企业管理器为数据库Stu_Course创建一个关于性别的取值规则,规则名自取,要求字段的取值仅能为‘男’或‘女’。
    具体步骤如下:

    2)将该规则绑定到Student表的Ssex字段上。
    具体步骤如下:

    3)解除Student表的Ssex列上的绑定,并删除该规则。
    具体步骤如下:

    (2)使用T-SQL实施规则
    1)为数据库Stu_Course创建一个关于学号的规则,名称自取,学号的具体取值规则为:
    a.学号前四位为2002。
    b.学号后五位为数字字符。
    T-SQL语句为:
    create rule rule_Sno
    as @range like’2002[0-9][0-9][0-9][0-9][0-9]'

    2)将该规则绑定到表Student表、SC表的Sno列上。
    T-SQL语句为:
    exec sp_bindrule ‘rule_Sno’,‘Student.Sno’
    exec sp_bindrule ‘rule_Sno’,'SC.Sno’

    3)解除所有的绑定,并删除该规则。
    T-SQL语句为:
    exec sp_unbindrule ‘Student.Sno’
    exec sp_unbindrule 'SC.Sno’

    展开全文
  • 数据库实验数据库完整性

    千次阅读 2020-12-17 20:52:56
    实验数据库完整性 一、实验目的 1.掌握实体完整性的定义和维护方法。 2.掌握参照完整性的定义和维护方法。 3.掌握用户自定义完整性的定义和维护方法。 4.掌握触发器的设计和使用方法 二、实验内容和要求 1.定义...

    实验六 数据库的完整性

    一、实验目的

    1.掌握实体完整性的定义和维护方法。
    2.掌握参照完整性的定义和维护方法。
    3.掌握用户自定义完整性的定义和维护方法。
    4.掌0握触发器的设计和使用方法

    二、实验内容和要求

    1.定义实体完整性、删除实体完整性。
    2.定义参照完整性,定义参照完整性的违约处理,删除参照完整性。
    3.定义用户自定义完整性,删除用户自定义完整性。
    4.定义before和after触发器。
    要求:能够写出两种方式定义实体完整性的SQL语句:创建表时定义实体完整性、创建表后定义实体完整性;能够写出两种方式定义参照完整性的SQL语句:创建表时定义参照完整性、创建表后定义参照完整性;针对具体应用,选择not null,unique,check等,定义属性上的约束条件;设计SQL语句验证完整性约束是否起作用;能够理解不同类型触发器的作用和执行原理;验证触发器的有效性。

    三、实验过程

    (一)考虑下面的关系模式:
    研究人员(人员编号,姓名、年龄、职称)
    项目(项目编号,名称,负责人编号,类别)
    参与(项目编号,人员编号,工作时间)
    一个研究人员可以参与多个项目,一个项目有多个研究人员参加,工作时间给出某个研究人员参加某项目的月数。
    创建三张表,并定义下面的完整性约束:
    (1)定义三个关系中的主码、外码、参照完整性;
    (2)项目名称必须互不相同;
    (3)每个研究人员的年龄不能超过35岁;
    (4)每个研究人员的职称只能是“讲师”、“副教授”或“教授”
    (5)设计SQL语句在表中进行插入、删除、修改操作验证完整性约束是否起作用
    按照要求(1)、(2)、(3)、(4)创建表:

    #研究人员表
    #方法一:CREATE TABLE staff
                    ( sno CHAR(10) PRIMARY KEY,
                     sname CHAR(10),
                     age INT CHECK(age<=35),
                     jobTitle CHAR(10) CHECK(jobTitle IN('讲师','副教授','教授'))
                    );
    #方法二:CREATE TABLE staff
                   (sno CHAR(10),
                    sname CHAR(10),
                   age INT CHECK(age<=35),
                   JobTitle CHAR(10) CHECK(jobTitle IN('讲师','副教授','教授')),
                   PRIMARY KEY(sno)
                  );
    #项目表
    #方法一:CREATE TABLE project
                   (pno CHAR(10) PRIMARY KEY,
                    pname CHAR(50) UNIQUE NOT NULL,
                    fno CHAR(10),
                    type CHAR(10)
                   );
    #方法二:CREATE TABLE project
                   ( pno CHAR(10),
                    pname CHAR(50) UNIQUE NOT NULL,
                    fno CHAR(10),
                    type CHAR(10),
                    PRIMARY KEY(pno)
                   );
    #参与表
    CREATE TABLE attend
            (pno CHAR(10),
             sno CHAR(10),
             time CHAR(50),
             FOREIGN KEY(sno) REFERENCES staff(sno),
             FOREIGN KEY(pno) REFERENCES project(pno)
            );
    

    (5)验证完整性约束是否起作用
    验证主键 验证结果:插入失败,约束成功

    INSERT 
    INTO staff
    VALUES('111111','lyh',26,'教授');
    INSERT 
    INTO staff
    VALUES('111111','李贻慧',27,'教授');
    

    验证外键 验证结果:插入失败,约束成功

    INSERT 
    INTO attend
    VALUES('001','111111','半年');
    

    验证项目名称必须不同 验证结果:插入失败,约束成功

    INSERT 
    INTO project
    VALUES('01','数据库设计','001','数据库1');
    INSERT 
    INTO project
    VALUES('02','数据库设计','002','数据库2');
    

    #验证研究人员的年龄不能超过35岁

    INSERT 
    INTO staff
    VALUES('2018413449','李贻慧','38','教授');
    

    #验证研究人员的职称只能是“讲师”、“副教授”或“教授”

    INSERT 
    INTO staff
    VALUES('2018413449','李贻慧','26','博士');
    

    (二)考虑(一)中的关系模式,使用alter table add constraint声明如下完整性约束:
    (1)负责人编号参照研究人员的“人员编号”属性,当对“研究人员”修改时,若违反约束则将负责人编号置为NULL,当对“研究人员”删除时,若违反约束则将项目中的相应元组删除。

    ALTER TABLE project
    ADD CONSTRAINT c11 FOREIGN KEY(fno) REFERENCES staff(sno) ON DELETE SET NULL ON UPDATE SET NULL;
    ALTER TABLE project
    ADD CONSTRAINT c12 FOREIGN KEY(fno) REFERENCES staff(sno) ON DELETE CASCADE ON UPDATE CASCADE ;
    

    (2)工作时间在1到12之间

    ALTER TABLE attend
    ADD CONSTRAINT c2 CHECK(time>=1 AND time<=12);
    

    (3)研究人员姓名不能为空

    ALTER TABLE staff
    ADD CONSTRAINT c3 CHECK(sname IS NOT NULL);
    

    (4)设计SQL语句在表中进行插入、删除、修改操作验证完整性约束是否起作用

    验证语句:                     验证结果
    
    INSERT 
    INTO attend
    VALUES('01','111111','15');
    

    #验证研究人员姓名不能为空

    INSERT
    INTO staff(sno,age,jobTitle)
    VALUES('222222',19,'讲师');
    

    (三)删除完整性约束
    (1)删除“参与”的外键

    ALTER TABLE attend
    DROP FOREIGN KEY attend_ibfk_1;
    ALTER TABLE attend
    DROP FOREIGN KEY attend_ibfk_2;
    

    (2)删除“项目”的主键

    ALTER TABLE project
    DROP PRIMARY KEY;
    

    (3)删除研究人员年龄的约束

    ALTER TABLE staff
    DROP CHECK staff_chk_1;
    

    (四)创建触发器
    (1)在s_t数据库中创建表summary(sno,ncourses,avg),包含学生学号、选修课程数量、平均分,并将目前每个学生选修课程数量和平均分存入该表。
    #创建表

    CREATE TABLE summary
    		(sno char(9) PRIMARY KEY,
    		 ncourses int,
    		 avg double
    		);
    

    #存入数据
    方法一:(之前在实验三中建立过一个相同功能的视图v_student,所以存入数据时把视图中的数据拿到存入即可)

    INSERT
    INTO summary
    SELECT *
    FROM v_student;
    

    方法二:

    INSERT
    INTO summary
    SELECT Sno,count(*),AVG(Grade)
    FROM sc
    GROUP BY Sno;
    

    (2)创建触发器update_summary1,当修改了学生课程成绩时,更新summary表中该学生的平均分。

    Create trigger update_summary1
    After update on sc
    For each row
    Begin
    UPDATE summary 
    SET avg = 
    (Select avg(Grade) 
    from sc 
    where sno=new.sno) WHERE sno=new.sno;
    End;
    

    (3)创建触发器update_summary2,当添加了学生选课记录时,更新summary表中该学生的选课数量和平均分。如果是该学生第一次选课,那么在summary表中插入一条新纪录。

    CREATE TRIGGER update_summary2
    after insert on sc
    For each row
    Begin
    Set @nums = (Select count(*) from sc where sno=new.sno);
    if @nums=1 then
    INSERT INTO summary
    VALUES(sno,1,grade);
    Else
    UPDATE summary 
    SET ncourses=ncourses+1,avg=(
    Select avg(Grade) 
    from sc 
    where sno=new.sno) WHERE sno=new.sno;
    End if;
    End;
    

    (4)创建触发器check_age,当添加学生记录时,如果该学生年龄小于18或没有提供年龄,则将其年龄设置为18。

    CREATE TRIGGER check_age
    before insert on student
    For each row
    Begin
    if new.sage<18 or new.sage is null then
    set new.sage=18;
    End if;
    End;
    

    (5)创建触发器check_course,当添加学生选课记录时,检查该学生是否选修了此课程new.cno的直接先修课,如果没有则拒绝添加选课记录。
    signal SQLSTATE ‘TX000’ SET MESSAGE_TEXT = ‘can not insert ……’;
    这里了没写出来,运行有问题,改了好久
    CREATE TRIGGER check_course
    before insert on sc
    For each row
    Begin
    select count(*) as count
    from sc
    where cno in
    ( Select cpno
    from course
    where cno=new.cno)
    if count=0
    signal SQLSTATE ‘TX000’ SET MESSAGE_TEXT = ‘can not insert’;
    End if;
    End;

    四、实验总结(遇到的问题及解决方法)

    一开始在建立表时,没有指定数据类型位char的长度,在定义sql语句,插入数据验证时发现,报长度过长的错误,打开各表,点击设计表,在可视化界面发现类型位char的长度均为1,总结:char类型不指定长度默认为1。故需指定char类型的长度。
    再删除外键约束时遇到了问题,网上查找资料找到了解决方法
    https://jingyan.baidu.com/article/4ae03de32dfe9a3eff9e6bdc.html
    用show create table attend 可查看attend表的外键id,如下图
    使用ALTER TABLE attend DROP FOREIGN KEY 外键id;即可删除对应外键

    在删除staff表的年龄约束时也遇到了类似问题,依旧用show create table 表名语句查找对应的check。

    mysql仅支持行级触发器

    展开全文
  • 数据完整性。使用T-SQL语句完成以下内容。 1)将数据库stu的表course的cno字段定义为主键,约束名称为cno_pk; USE student ALTER TABLE XSKC.course ADD CONSTRAINT cno_pk PRIMARY KEY(cno) 2)为表course中的...
    1. 数据完整性。使用T-SQL语句完成以下内容。

    1)将数据库stu的表course的cno字段定义为主键,约束名称为cno_pk;
    USE student
    ALTER TABLE XSKC.course
    ADD CONSTRAINT cno_pk PRIMARY KEY(cno)
    2)为表course中的字段cname添加唯一值约束;
    USE student
    ALTER TABLE XSKC.course
    ADD CONSTRAINT cname_pk UNIQUE(cname)
    3)对于数据表sc的sno、cno字段定义为外码,使之与表student的主码sno及表course的主码cno对应,实现如下参照完整性:
    删除student表中记录的同时删除sc表中与该记录sno字段值相同的记录;
    修改student表某记录的sno时,若sc表中与该字段值对应的有若干条记录,则拒绝修改;
    修改course表cno字段值时,该字段在sc表中的对应值也应修改;
    删除course表一条记录时,若该字段在在sc表中存在,则删除该字段对应的记录;
    向sc表添加记录时,如果该记录的sno字段的值在student中不存在,则拒绝插入;

    ALTER TABLE XSKC.sc
    ADD CONSTRAINT sc_fk FOREIGN KEY (sno) REFERENCES XSKC.student(sno) on delete cascade on update no action,
    FOREIGN KEY (cno) REFERENCES XSKC.course(cno) on delete cascade on update cascade
    Go
    4)定义check约束,要求学生学号sno必须为9位数字字符,且不能以0开头,第二三位皆为0;
    ALTER TABLE XSKC.student
    ADD CONSTRAINT sno_ck
    CHECK(sno like ‘[1-9]00[0-9][0-9][0-9][0-9][0-9][0-9]’)
    5)定义stu数据库中student表中学生年龄值在16~25范围内;
    ALTER TABLE XSKC.student
    ADD CONSTRAINT sage_ck
    CHECK(sage between 18 and 30)
    6)定义stu数据库student表中学生年龄值默认值为20;
    ALTER TABLE XSKC.student
    ADD CONSTRAINT sage_df
    DEFAULT 20 FOR sage
    7)修改student表学生的年龄值约束可以为15~30范围内;
    ALTER TABLE XSKC.student
    DROP CONSTRAINT sage_ck
    go
    ALTER TABLE XSKC.student
    ADD CONSTRAINT sage_ck
    CHECK(sage >= 15 AND sage <= 30)
    8) 删除表course中字段cname的唯一值约束;
    USE student
    ALTER TABLE XSKC.course
    DROP CONSTRAINT cname_pk

    2. 以实验数据库为基础数据,编写以下触发器并测试。

    1) 为表course建立一个 INSERT触发器,当插入的新行中课程学分(ccredit)的值不是1~6时,就激活该出发器,撤销该插入操作,并使用RAISERROR语句返回一个错误信息。
    CREATE TRIGGER tri_INSERT_course ON XSKC.course
    FOR INSERT
    AS
    DECLARE @ccredit tinyint
    SELECT @ccredit=XSKC.course.ccredit
    FROM XSKC.course,inserted
    WHERE XSKC.course.ccredit=inserted.ccredit
    IF @ccredit NOT BETWEEN 1 AND 6
    BEGIN
    ROLLBACK TRANSACTION
    RAISERROR(‘插入课程学分不在~6之间’,16,10)
    END
    2)为course表再创建一个UPDATE触发器,当更新了某门课程的课程号信息时,就激活该触发器级联更新sc表中相关的课程号信息,并使用PRINT语句返回一个提示信息。
    CREATE TRIGGER tri_UPDATE_course ON XSKC.course
    FOR UPDATE
    AS
    IF UPDATE(cno)
    BEGIN
    DECLARE @oldcno char(3),@newcno char(3)
    SELECT @oldcno=deleted.cno,@newcno=inserted.cno
    FROM deleted,inserted
    WHERE deleted.cno=inserted.cno
    PRINT ‘准备级联更新XSKC.sc表中的课程号信息……’
    UPDATE XSKC.sc
    SET cno=@newcno
    WHERE cno=@oldcno
    PRINT ‘已经级联更新XSKC.sc表中原课程号’+@oldcno+‘为’+@newcno
    END
    3)为student表创建DELECT触发器,在删除中的一条记录的同时将sc表中的相应记录也删除。
    CREATE TRIGGER tri_student on XSKC.student
    AFTER DELETE
    AS
    BEGIN
    DELETE FROM sc
    WHERE sno=(SELECT sno FROM deleted)
    END
    4)创建INSTEAD OF触发器,当向sc表中插入记录时,先检查sno列上的值在student中是否存在,如果存在执行插入操作,如果不存在则提示“该学生不存在”。
    CREATE TRIGGER tri_sc
    ON XSKC.sc AFTER INSERT
    AS
    BEGIN
    IF(SELECT COUNT(*) FROM inserted JOIN XSKC.student ON inserted.sno=student.sno)=0
    BEGIN
    ROLLBACK TRAN
    PRINT ‘该学生不存在!’
    END
    END
    5)比较约束与触发器的执行顺序。(在一个表中创建CHECK约束和触发器,然后向表中插入一条不符合约束和触发器的记录,察看谁先发生作用。)
    ALTER TABLE XSKC.course
    ADD CONSTRAINT CK_ccredit
    CHECK (ccredit >= 1 AND ccredit <= 6)

    INSERT XSKC.course
    values(‘10’,‘数据库’,‘5’,7)
    在这里插入图片描述
    从实验可以看出,约束优先于for或after触发器起作用,它在更新前就生效,对要更新的值进行规则检查。当检查到与现有规则冲突时,系统给出错误消息,并取消更新操作。如果检查没有问题,更新被执行,再激活触发器。

    展开全文
  • 1.实验题目:数据表的更新 2.实验目和要求: 1)掌握SQL语句的数据操纵功能 2)掌握SQL语言的数据插入,修改,删除操作 3)掌握与嵌套查询相结合的插入,删除,修改数据的SQL语句 3.实验步骤: 1) 按实验内容要求...

    实验四

    1.实验题目:数据表的更新

    2.实验目和要求:

     1)掌握SQL语句的数据操纵功能

    2)掌握SQL语言的数据插入,修改,删除操作

    3)掌握与嵌套查询相结合的插入,删除,修改数据的SQL语句

    3.实验步骤:

    1) 按实验内容要求完成各项操作

    2) 根据题目要求给出解决方案

    3) 提交实验报告

    4.实验内容

    1. 在学生表中插入一新生信息(‘200213808’,’HUJING’,’女’,22,’计算机’)

    INSERT

    INTO Student(SNO,SNAME,SEX,AGE,DEPT)

    VALUES('200213808','胡静','女',22,'计算机系');

    1. 新建一个学生平均成绩表spjcj,将学生的平均成绩插入到spjcj表中

            CREATE TABLE SPJCJ

            (SNO CHAR(10) PRIMARY  KEY,

    AVG_GRADE SMALLINT);

    INSERT

    INTO SPJCJ(SNO,AVG_GRADE)

    SELECT SNO,AVG(GRADE)

    FROM SC

    GROUP BY SNO;

     

     

    1. 删除数据库中学号为’200213801’的退学学生有关信息。

    DELETE 

    FROM Student

    WHERE SNO='200213808';

    1. 将计算机系学生2号课成绩全部提高5%。

    UPDATE SC

    SET GRADE=GRADE*1.05

    WHERE  CNO='2'AND SNO IN(SELECT  SNO

    FROM Student

    WHERE DEPT='计算机系');

    1. 删除没有成绩的学生选课记录

    DELETE 

    FROM SC

    WHERE SNO IN(SELECT SNO

    FROM SC

    WHERE GRADE=NULL);

     

     5.实验总结:如上实验内容

     6.思考题

         请分析数据库模式修改语句和数据更新语句的区别。

    Alter用来修改基本表,是对表的结构进行操作,比如对字段增加,删除,修改类型。

    Update用来修改表中的数据,修改某一行某一列的值。

     

     

    实验六

    1.实验题目:数据库的完整性

    2.实验目的和要求:

    1. 掌握数据库的实体完整性约束定义,完整性检查及违约处理方式。
    2. 掌握数据库的参照完整性约束定义,完整性检查及违约处理方式。
    3. 掌握数据库的用户定义完整性约束定义,完整性检查及违约处理方式。
    4. 掌握触发器的定义及使用。

     3.实验步骤:

    1. 按实验内容要求完成各项操作
    2. 根据题目要求给出解决方案
    3. 提交实验报告

    4.实验内容:

    1. 定义S, C表,定义实体完整性约束,定义学生的年龄在19到22岁之间,课程名唯一的约束

    CREATE TABLE S

    (

    SNO CHAR(10),

    SNAME CHAR(10),

    SEX CHAR(10),

    AGE SMALLINT CONSTRAINT C4 CHECK(AGE<22 AND AGE>19),

    DEPT CHAR(10),

    PRIMARY KEY NONCLUSTERED(SNO)

    )

    CREATE TABLE C

    (

    CNO CHAR(10),

    CNAME CHAR(10) UNIQUE,

    CCREDIT CHAR(10),

    CT CHAR(10),

    PRIMARY KEY NONCLUSTERED(CNO)

    )

    1. 在C表中增加cpno字段,cpno字段为先修课号,定义cpno为外码,参照C表的cno,并定义当删除被参照表中相关记录时,要求违约处理方式为置空,当发生修改操作时,违约处理方式为级联。

    CREATE TABLE C

    (

    CNO CHAR(10),

    CNAME CHAR(10) UNIQUE,

    CCREDIT CHAR(10),

    CT CHAR(10),

    CPNO CHAR(10),

    PRIMARY KEY NONCLUSTERED(CNO)

    FOREIGN KEY(CPNO)REFERENCES C(CNO)/*表级完整性约束条件,CPNO是外码,被参照表是C,被参照列是CNO*/

    ON DELETE NO ACTION

    ON UPDATE CASCADE

    )

     

    1. 定义SC表的实体集参照完整性约束,要求当其被参照表发生删除操作时,S表违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。

    CREATE TABLE SC

    (CNO CHAR(10)

    SNO CHAR(10)

    GRADE SMALLINT

    PRIMARY KEY(CNO,SNO)

    FOREIGN KEY(SNO)REFERENCE S(SNO)

    ON DELETE NO ACTION

    ON UPDATE NO ACTION

    FOREIGN KEY(CNO)REFERENCE C(CNO)

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

     

    1. 触发器
    • 建立一DML触发器,每当学生的成绩发生更新时,将更新的学号,成绩存入g-log表内

    CREATE TABLE g-log

    (SNO CHAR(10)

    GRADE SMALLINT)

    CREATE TRIGGER RTI_UP

    ON SC

    FOR UPDATE

    AS

    IF UPDATE(GRADE)

    BEGIN

    INSERT INTO g-log

    SELECT SNO,GRADE

    FROM INSERTED

    WHERE GRADE BETWEEN 0 AND 100

    END

    RETURN

    • 建立一个INSTEAD OF触发器,每当删除课程表中记录时,先检查此课程是否已被选修,如选修则不允许删除,且给出提示信息“此课程已有学生已选修,无法删除”

    CREATE TRIGGER C_CHECK1

    ON C

    INSTEAD OF DELETE

    AS

    IF EXISTS(SELECT CNO

    FROM SC

    WHERE CNO=SC.CNO)

    BEGIN

    PRINT’此课程已有学生已选修,无法删除’

    ROLLBACK TRANSACTION

    END

    1. 实验总结:内容如上实验内容
    2. .思考题
    1. 试分析参照完整性违约检查及违约处理的方式。

       拒绝(NO ACTION)执行

       级联(CASCADE)操作:当删除或修改参照表的一个元组造成了与参照表的不一致。

       设置为空值(SET-NULL)当删除或修改参照表的一个元组造成了与参照表的不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

    1. 试比较AFTER触发器和INSTEAD OF触发器的区别。

    AFTER表示在触发事件的操作执行之后激活触发器,只能在表上指定,且动作晚于约束处理。

    INSTEAD OF

    • 用来代替通常的触发动作
    • 动作早于表的约束处理
    • 不仅可以在表上定义,还可以在带有一个或多个基表的视图上定义

    区别:每个表上只能创建一个INSTEAD OF触发器,但可以创建多个AFTER触发器。

     

     

     

     

     

     实验七

     1.实验题目:数据库的安全性

    2.实验目的和要求:

    1. 掌握SQL Server 2005的安全控制机制
    2. 掌握SQL Server2005的身份验证模式
    3. 理解数据库用户帐户的基本概念
    4. 理解角色的概念

    3.实验步骤:

    1. 按实验内容要求完成各项操作
    2. 根据题目要求给出解决方案
    3. 提交实验报告

    4.实验内容:

    1. 定义登录log1,log2,log3
    2. 定义用户user1,user2,user3

    CREATE USER user1

    CREATE USER user2

    CREATE USER user3

    1. 掌握SQL SERVER 2005架构和用户分离的概念
    2. 数据库的授权、授权语句
    • 将查询SC表和修改GRADE属性的权限授予用户user1。

    GRANT SELECT,UPDATE(GRADE)

    ON SC

    TO user1;

    • 将对表S的插入权限授予用户user2,并允许他将此权限授予其他用户。

    GRANT INSERT

    ON S

    TO user2;

    • 允许用户user3拥有对cs系学生的查询权限

    GRANT SELECT(DEPT='CS')

    ON S

    TO user3;

     

    • 创建角色R1,授予R1 课程表查询和插入的权限,并授予用户user3

    CREATE ROLE R1

    GRANT SELECT,INSERT

    ON C

    TO R1;

    GRANT R1

    TO user3

    • 删除角色R1课程表的插入权限

     

    REVOKE INSERT

    ON C

    FROM R1

    • 收回所有用户对表S的插入权限

    REVOKE INSERT

    ON TABLE S

    FROM user1,user2,user3

    5.实验总结

    6.思考题

    1.请分析with grant option、with check option、with admin option有何联系和区别

    如果指定了with grant option子句,则获得某种权限的用户还可以把这种权限在授予其他的用户。如果没有指定,则获得某种权限的用户只能使用该权限,不能传播该权限。

    如果指定了with admin option子句,则获得这种权限的角色或用户还可以把这种权限在授予其他的角色。

    with check option表示对视图进行UPDATE,INSERT,DELETE操作时要保证更新,插入或删除的行满足视图定义中的谓词条件。

    1. 根据实验内容分析角色在权限分配上有何优点。

    一个角色包含的权限包括直接授予这个角色的全部权限加上其他角色授予这个角色的全部权限。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 学习用户自定义约束,并实践用户完整性,利用短语not null,unique,check保证用户定义完整性。 二、实验内容 1. 问题描述 2. 数据库设计 (1)利用create语句分别创建四个表,同时要注意标注实体完整性...
  • 数据库完整性与安全性实验本文仅作为对下载资源的详细介绍实验内容完整性实验与要求安全性实验与要求实验步骤发生冲突的解决办法 本文仅作为对下载资源的详细介绍 完整实验报告下载链接:...
  • 数据库实验三 SQL数据完整性

    千次阅读 2020-01-11 11:05:18
    SQL数据定义和操作欢迎阅读本教程一、数据定义二、数据更新三、数据查询 欢迎阅读本教程 掌握关系数据库语言 SQL 的使用。 使所有的 SQL 作业都能上机通过。 实现内容如下: 数据定义:表的建立/删除/修改; 索引...
  • –在选修数据库中,以Student(sno,sname,ssex,sage,sdept),Course(cno,cname,cpno,credit),SC(sno,cno,grade)表为基础完成下列完整性约束。 –(1)为数据库表Course创建check约束:当插入或修改一个记录时,确保...
  • 数据库完整性实验

    千次阅读 2018-05-25 09:42:13
    用户定义的完整性 ( 1 ) 不允许空值 insert into sc values ( 1 ,null, 60 );   ( 2 ) 列值唯一 create table dept ( deptno int , dname char ( 20 ) unique not null , loc char ...
  • 一、实验目的 熟练掌握使用Navicat和Transact-SQL语言两种方法创建、修改和删除表。掌握管理表的有关系统存储过程。 二、实验内容 1、利用Navicat创建满足以下要求的数据库:①数据库存在于连接MySQL中;②数据库...
  • 实验九 数据库完整性实验(V2.0)

    千次阅读 2013-11-15 14:07:59
    数据库完整性 一、实验目的:1.掌握实体完整性的定义2.掌握参照完整性的定义,级联(修改、删除)、拒绝和设置为空等定义方法。3.掌握不能为空、唯一性和check等方式的自定义完整性。4.掌握触发器的应用。(*) 二...
  • 对于数据库来说,关系型数据库对于保证数据完整性和一致性方面表现是最好的! 数据的完整性 完整性分类 具体描述 如何保证 实体完整性 每个实体都是独一无二的 主键 / 唯一索引(唯一约束) 参照完整性...
  • 数据库实验11 SQL语言-数据库完整性

    千次阅读 2019-11-11 20:17:11
    数据库实验11 SQL语言-数据库完整性 一.实验环境: ​ MYSQL WORKBENCH 二.实验内容与完成情况: 5. 创建一个教职工表teacher(tno,tname,tage,telphone,tsex,id),将教工号tno设置为主键,性别默认值为"男" create...
  • 4. 掌握用户定义完整性的实现方法实验要求 二、实验环境 硬件平台:PC; 软件平台:Windows 10 / SQLSERVER 2008 R2; 三、实验内容 1. 建立课程的实体完整性, 和课程号 Cno 的参照完整性; 课程实体完整性:alter...
  • 数据库实验 数据控制-安全性部分+ 数据控制-完整性部分+数据备份和恢复 一、实验环境 本实验实验环境为SQL Sever 2008 R2。 二、实验内容与完成情况 一、实验目的 熟悉通过SQL对数据库进行数据控制,包括安全性、...
  • 实验数据库完整性

    千次阅读 2018-05-06 09:23:56
    实验内容 (1)创建一个名为Test_Integrity的数据库。 (2)用命令方式在数据库中创建student表,course表和sc表,注意其中的约束按如下方式进行定义:ssex字段定义为表级约束,grade字段定义为行级约束,并为其定义...
  • 数据库实验3教程
  • SQL实验六 数据库完整性控制

    千次阅读 2019-05-14 16:27:23
    实验数据库完整性控制 一、实验目的 (1)、理解SQL Server的实体完整性、参照完整性和用户自定义的完整性。 (2)、掌握SQL Server中实体完整性的建立,实践违反实体完整性的结果。 (3)、掌握使用外键...
  • 实验数据库的安全性和完整性控制 实验教室 913 实验日期 2018年10月22日 学 号 2016214220 姓 名 ** 专.....
  • 数据库实验5——完整性实验

    千次阅读 2018-07-04 22:52:01
    1.在前几次实验所使用的数据库中新建一个教师信息表,表名为Teacher,字段包括Tno(教师编号),Tname(姓名),Tsex(性别),Ttitle(职称),完整性包括:设定Tno为主键,Tname非空,Tsex的取值范围为“男”或“女”。...
  • 数据库实验完整性

    千次阅读 2018-09-21 13:11:38
    一、实验目的: ...1、了解数据库完整性约束的基本概述  2、了解SQL Server完整性约束技术。 包括实体完整性、参照完整性、用户定义完整性等。 3、了解主键(PRIMARY KEY)约束  4、了解外键(FO...
  • 数据库实验完整性

    千次阅读 2018-07-06 16:26:56
    一、实验目的:1、掌握数据库约束的概念;...在前几次实验所使用的数据库中新建一个教师信息表,表名为Teacher,字段包括Tno(教师编号),Tname(姓名),Tsex(性别),Ttitle(职称),完整性包括:设定Tno为主键,T...
  • 【吐血整理】数据库完整性

    千次阅读 多人点赞 2020-04-06 15:59:31
    本文主讲 数据库完整性,欢迎阅读~ ????本文目录前言一、实体完整性1. 实体完整性定义2. 实体完整性检查和违约处理二、参照完整性1. 参照完整性定义2. 参照完整性检查和违约处理三、用户定义的完整性1. 属性上的约束...
  • 1.熟悉通过SQL对数据进行完整性控制。 2.完成书本上习题的上机练习。 2实验工具MYSQL 利用KingbaseES及其交互式查询工具ISQLW来熟悉SQL。 3实验内容和要求 使用SQL对数据进行完整性控制(3类完整性、...
  • 实验四 oracle的安全性...3. 并体会oracle数据库系统在安全性和完整性保护方面的特性。 实验要求: 1. 在进行本实验之前,应熟练课程内容,在上机之前做好实验计划,编写好相应的代码。 实验内容: Grant 语句的
  • 数据库实验课作业-2完整性

    千次阅读 2018-11-13 14:17:58
    (1)在数据库school中建立表Stu_Union,进行主键约束,在没有违反实体完整性的前提下插入并更新一条记录。 (2)演示违反实体完整性的插入操作。 (3)演示违反实体完整性的更新操作。 (4)演示事务的处理,包括...
  • 数据库数据库中表等数据库对象的建立实验(包括关系图、完整性、权限控制、视图、索引等内容)实验1 SQL Server的安装安装过程展示实验2 设计数据库、创建数据库数据实验5 视图实验6 完整性约束实验7 权限管理...
  • mysql数据完整性实验

    千次阅读 2020-05-28 09:13:56
    课题 实验数据完整性 目的要求 1. 掌握使用SQL语句CREATE TABLE定义约束的方法。 2. 掌握使用SQL语句ALTER TABLE增加或删除约束的方法。 3. 了解约束的各种类型。 4. 掌握使用SQL语句CREATE TRIGGER创建触发器的...
  • 实验五 数据库完整性实验目的】 1、掌握实体完整性约束、参照完整性约束 2、灵活应用自定义完整性约束 3、了解触发器在自定义完整性中的应用 【实验内容】一、定义一个教师表Teacher(Tno,TName,TSex,TAge,...
  • 数据库-数据库完整性

    千次阅读 多人点赞 2019-06-29 00:26:10
    数据库完整性 实体完整性 · 定义实体完整性 · 实体完整性检查和违约处理 参照完整性 · 定义参照完整性 · 参照完整性检查和违约处理 用户定义的完整性 · 属性上的约束条件 · 元祖上的约束条件 完整性...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,553
精华内容 21,421
关键字:

数据库数据完整性实验