mysql数据完整性实验

教案首页
(以2课时为单元)
课 序 授课日期 授课班次 授课教师 批准人
4
课题 实验四 数据完整性
目的要求 1. 掌握使用SQL语句CREATE TABLE定义约束的方法。
2. 掌握使用SQL语句ALTER TABLE增加或删除约束的方法。
3. 了解约束的各种类型。
4. 掌握使用SQL语句CREATE TRIGGER创建触发器的方法。
5. 掌握引发触发器的方法。
6. 掌握使用SQL语句DROP TRIGGER删除触发器的方法。
教学内容 1. SQL语句CREATE TABLE定义约束的方法。
2. SQL语句ALTER TABLE增加或删除约束的方法。
3. SQL语句CREATE TRIGGER创建触发器的方法。
4. SQL语句DROP TRIGGER删除触发器的方法。
重点难点 建表、修改表时约束的创建、修改及删除SQL语句,触发器的创建和删除。
教学方法
手 段 教学方法:实验教学法
手 段:机器演示
教学步骤 1.内容讲解
2.上机练习
3.针对问题进一步讲解
复 习
提 问 题
作业题目 完成实验指导书中要求的上机作业
预习内容
课时分配(以分钟计算)
教学环节 复习提问 新课讲解 课堂实践 每课小结 布置作业
时间分配 30 70
教 学 内 容 课堂组织
一、上机内容

  1. 创建students数据库,在该数据库下创建表stu,并同时创建约束,表结构及约束要求如表1所示。
    表1 stu的表结构
    字段 类型 是否为空 约 束
    学号 char(4) 否 主键
    姓名 char(8) 是
    性别 char(2) 是
    出生日期 date 是
    Create table stu(
    Xuehao char(4),
    Xingming char(8),
    Xingbie char(2),
    Chushengriqi date,
    Constraint pk_no primary key(xuehao)
    )

  2. 创建表sc,并同时创建约束,表结构及约束要求如表2所示。
    表2 sc的表结构
    字段 类型 是否为空 约 束
    学号 char(4) 否 外键参照stu表的学号列(约束名fk_sno)
    课号 char(4) 否
    成绩 decimal(5,2) 是 0≦成绩≦100
    设置(学号,课号)为主键。
    Create table stu(
    Xuehao char(4),
    kehao char(4),
    Chenbgji demical(5,2),
    Constraint pk_no foreign key(xuehao) reference stu(xuehao) on update cascade,
    Contraint chengji_pk check(changjji>=0 and chengji<=100)
    )

  3. 创建表course,并同时创建约束,表结构及约束要求如表3所示。
    表3 course的表结构
    字段 类型 是否为空 约 束
    课号 char(4) 否
    课名 char(20) 是 唯一约束(约束名uq_cname)
    学分 int 是
    Create table stu(
    keehao char(4),
    kemingchar(4),
    Xuefen int,
    Constraint uq_name unique(keming);
    )

4.在course表的课号列建立主键约束。
Alter table course add constraint pk_no primary key(kehao);
5.在sc表的课号列建立外键约束fk_cno,参照course表的课号列的取值,要求实现级联更新。
Alter table sc add constraint fk_cno foreign key(kehao) references course(kehao) on update cascade;
6.在stu表的姓名列建立唯一约束名uq_sname。
Alter table stu add constraint uq_sname unique(xingming);
7.在course表的学分列建立检查约束ck_xf,检查条件为学分>0。
Alter table course add constraint ck_xf check(xuefeng>0);
8. 删除sc表的外键约束fk_cno,fk_sno。
Drop foreign key fk_cno;
Drop foreign key fk_no;
8.删除stu表的主键约束。
Alter table stu drop primary key;
9.删除course表的唯一约束uq_cname。
Alter table course drop unique uq_cname;
10.创建测试表test,包含一个字段date_time,字段类型varchar(50);
Create table test(
Date_time varchar(50)
);
创建触发器test_trig,实现在stu表中每插入一条学生记录后,则自动在test表中追加一条插入成功时的日期时间。SYSDATE()函数用来获取当前的日期和时间。
Create trigger tesr_trig after insert on stu for each row insert into test values(sysdate());
为stu表插入一条记录引发触发器,查看test表的内容。
Insert into stu values(1001,’张三’,’男’,’2000-2-1’);
Select * from test;
11.在course表上创建触发器del_trig,当course表上删除一门课程时,级联删除sc表该课程的记录。
Create trigger del_trig after delete on course for each row delete from sc where kehao=select kehao from deleted;
删除course表的一条记录,查看sc表相应记录是否被自动删除。
二、实验思考

  1. 请说明唯一约束和主键约束之间的联系和区别。
    一张表里只能有一个主键约束,可以有多个唯一约束
    2:唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值
    2.在course表中插入一条学分值小于0的记录,该记录能插入成功吗?

    3.建立外键约束所参照的父表的列必须建立成主键吗?
  2. 可以建立几种类型的触发器?
    3种
  • 13
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱 coding 的遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值