实验11——数据库完整性

《数据库系统实验》

实验报告

题目

实验11——数据库完整性

一、实验环境:

1、操作系统:Windows 11 22H2;

2、DBMS :mysql 8.0 CE;

二、实验内容与完成情况

11.5 创建一个教工表teachertnotnametaddtelphonetsexid),将教工号tno设为主键,性别默认值为“男”

SQL语言:

create table teacher

(

 tno CHAR(7) primary key#设置主键

    tname VARCHAR(10),

    tage INT,

    telphone CHAR(12),

    tsex char(2default '',  #性别默认值为""

    tid VARCHAR(20)

)engine=InnoDB;

desc teacher;

结果:

实验11——数据库完整性_第1张图片

11.6 根据教工表teacher完成以下任务

1 设置telphone默认值为00000000

SQL语言:

ALTER TABLE teacher modify telphone CHAR(12default '0000000'

desc teacher;

结果:

实验11——数据库完整性_第2张图片

2 设置tsexcheck检查约束为:输入值只能为“男”或“女”

SQL语言:

ALTER TABLE teacher CHANGE COLUMN tsex tsex enum('',''default '';

desc teacher;

结果:

实验11——数据库完整性_第3张图片

尝试插入tsex不为‘男’或‘女’的数据:插入失败。

实验11——数据库完整性_第4张图片

3 设置id的位数为15位或18位,每位都是数字

SQL语言:

delimiter //

create trigger tr_id after insert on teacher  #创建触发器

for each row

begin

declare iresult int default 0;

if (length(new.tid)!=15 and length(new.tid)!=18)  #如果id长度不为1518则报错

then

SIGNAL SQLSTATE'45000'SET MESSAGE_TEXT = 'The length is not allowed';

end if;

select new.tid regexp '^[0-9]*$' into iresult;  #如果id内容存在非数字则报错

if (iresult=0)

then 

SIGNAL SQLSTATE'45000' SET MESSAGE_TEXT ='id must be consisted of nums';

end if;

END//

尝试插入长度不为15或18的数据:插入失败。实验11——数据库完整性_第5张图片

插入长度为15和18的元素但包含非数字:插入失败。

实验11——数据库完整性_第6张图片

插入长度为15且均为数字的数据:插入成功。

实验11——数据库完整性_第7张图片

11.7 设有订报管理子系统数据库DingBao中的表PAPER,表内容如下

实验11——数据库完整性_第8张图片

请在掌握数据库完整性知识的基础上,根据表的内容设定尽可能多的完整性规则用于该表,用于保障该表的正确性和完整性。

举例:

①设置报纸编号为主码,并且pno的长度必须为6,同时是由组数字组成;

②约束ppr大小必须大于0;

③设置报纸的名称不可以为空且不可以相同。

SQL语言:

create table paper

(

 pno char(7) primary key ,

    pna char(20) unique not null,

    ppr float not null

)engine=InnoDB;

delimiter //

create trigger trig after insert on paper  #创建触发器

for each row

begin

declare iresult int default 0;

if (length(new.pno)!=6 or ppr<0)

then

SIGNAL SQLSTATE'45000';

end if;

select new.pno regexp '^[0-9]*$' into iresult;  #如果id内容存在非数字则报错

if (iresult=0)

then 

SIGNAL SQLSTATE'45000';

end if;

END//

验证方式与11.6基本一致,不再赘述。

你可能感兴趣的:(数据库系统原理,数据库,sql)