-
Mysql数据库实验及练习题相关
一、实验目的
1. 掌握使用SQL语句CREATE TABLE定义约束的方法。
2. 掌握使用SQL语句ALTER TABLE增加或删除约束的方法。
3. 了解约束的各种类型。
4. 掌握使用SQL语句CREATE TRIGGER创建触发器的方法。
5. 掌握引发触发器的方法。
6. 掌握使用SQL语句DROP TRIGGER删除触发器的方法。
二、实验内容
1. 创建students数据库,在该数据库下创建表stu,并同时创建约束,表结构及约束要求如表1所示。
表1 stu的表结构
字段 | 类型 | 是否为空 | 约 束 |
学号 | char(4) | 否 | 主键 |
姓名 | char(8) | 是 | |
性别 | char(2) | 是 | |
出生日期 | date | 是 |
2. 创建表sc,并同时创建约束,表结构及约束要求如表2所示。
表2 sc的表结构
字段 | 类型 | 是否为空 | 约 束 |
学号 | char(4) | 否 | 外键参照stu表的学号列(约束名fk_sno) |
课号 | char(4) | 否 | |
成绩 | decimal(5,2) | 是 | 0≦成绩≦100 |
设置(学号,课号)为主键。
3. 创建表course,并同时创建约束,表结构及约束要求如表3所示。
表3 course的表结构
字段 | 类型 | 是否为空 | 约 束 |
课号 | char(4) | 否 | |
课名 | char(20) | 是 | 唯一约束(约束名uq_cname) |
学分 | int | 是 |
4. 在course表的课号列建立主键约束。
5. 在sc表的课号列建立外键约束fk_cno,参照course表的课号列的取值,要求实现级联更新。
6. 在stu表的姓名列建立唯一约束名uq_sname。
7. 在course表的学分列建立检查约束ck_xf,检查条件为学分>0。
8. 删除sc表的外键约束fk_cno,fk_sno。
9. 删除stu表的主键约束。
10.删除course表的唯一约束uq_cname。
11.创建测试表test,包含一个字段date_time,字段类型varchar(50);
创建触发器test_trig,实现在stu表中每插入一条学生记录后,则自动在test表中追加一条插入成功时的日期时间。SYSDATE()函数用来获取当前的日期和时间。
为stu表插入一条记录引发触发器,查看test表的内容。
12.在course表上创建触发器del_trig,当course表上删除一门课程时,级联删除sc表该课程的记录。
删除course表的一条记录,查看sc表相应记录是否被自动删除。
三、实验思考
1、请说明唯一约束和主键约束之间的联系和区别。
主键约束:默认不能为空,必须是唯一的;外键都是指向另一张表的主键。一张表只能有一个主键。
唯一约束:列里面的内容,必须是唯一的,不能出现重复的情况,可以为空;唯一约束不可以作为其他表的外键;一张表可以有多个唯一约束。
2、在course表中插入一条学分值小于0的记录,该记录能插入成功吗?
不能。会报错。
3、建立外键约束所参照的父表的列必须建立成主键吗?
是,外键都是指向另外一张表的主键。
4、可以建立几种类型的触发器?
六种。