实验九 数据库的完整性设计
一、实验目的
熟练掌握使用 Navicat 和 Transact-SQL
语言两种方法创建、修改和删除表。掌握管理表的有关系统存储过程。
二、实验内容
1、利用 Navicat 创建满足以下要求的数据库:① 数据库存在于连接 MySQL
中;② 数据库名称为 xsgl; ③ 字符集选择 utf8--UTF-8 Unicode;排序规则选择
utf8_general_ci。
2、在数据库 xsgl 中,利用 Navicat 和 SQL 语句创建以下表格:
1)表格名为 xs(学生基本情况表),表格中各个属性的定义如下:
2)表格名为 kc(课程情况表),表格中各个属性的定义如下:
<1>、在 xs 表中定义 xh 为主键。
<2>、在 kc 表中定义 xh 和 kch 联合构成主键。
<3>、定义 kc 表中的 kcm 列满足唯一性约束。
<4>、定义 kc 表中的 fs 列默认值为 0。
<5>、定义 xs 表中的 xb 列的 CHECK 约束“男”或“女”。
参考:stackoverflow
<6>、在 xs 表与 kc 表之间定义外键 xh。
<7>、以下将创建一个学生—课程数据库,包括学生关系
Student、课程关系 Course 和选修关系 SC:
① 建立学生-课程数据库 xskc,创建 Student 表,并将 Student 表中的
Sno 属性定义为主键。
② 创建 Course 表和 SC 表,并将 SC 表中的 Sno, Cno
联合构成主键。
③ 定义 SC 表中的参照完整性
④ 显示说明参照完整性的违约处理示例
⑤ 定义 SC 表 Grade 属性不允许为空
三、课后练习题
1、新建名为 SPJ 的数据库。(其中数据表 S、P、J 和 SPJ
的关系模式及其含义见实验八)
见实验八。
2、在数据库 SPJ 中,合理地为库中每一个数据表定义主键和外键。
3、适当为各数据表及其字段添加约束(唯一性、默认值等)。
四、思考题
1、使用参考语句创建好 xs 和 kc 两个表之后,语句中对于 xb 列的 CHECK
约束是否起作用?如果未起作用,思考语句通过却未起作用的原因。
是。
output:
2、参考语句中参照完整性的违约处理示例“on delete cascade”和“on update
cascade”的含义是什么?“on delete no action”又代表什么?
“on delete cascade”:当删除 REFERENCE
的表中的元组时,同时删除本表中相应的元组。
“on update cascade”:当更新 REFERENCE
的表中的元组时,同时更新删除本表中相应的元组。
“on delete no action”:当删除 REFERENCE
的表中元组造成与本表不一致时,拒绝删除。
实验五 表数据的维护
一、实验目的
加深对数据安全性的理解,并掌握 Navicat
中有关用户,角色及操作权限的管理方法。
二、实验内容
1、在 Navicat 中,管理建立用户和分配用户权限。
在这里,我们可以发现 root 是 MySQL
最高级别权限的用户,它拥有查看、修改和删除 MySQL
软件中所有数据库的权限。当需要有多个数据库,并且分配给不同的用户使用,多个用户之间只有查看自己对应数据库的权限,不相互干扰,
需要建立多个数据库和用户,给用户设置管理指定数据库的权限。
操作方法如下:
① 右键点击“MySQL”连接,选择“连接属性”,将“保存密码”取消。 ②
鼠标右键点击“MySQL”连接,选择“创建数据库”,创建名为 xunmei
的数据库,字符集选择 utf8--UTF-8 Unicode 排序规则选择
utf8_general_ci。
③ 打开数据库 xunmei
后,点击界面上方的“用户”—“新建用户”—输入用户名“xmuser”、主机“localhost”、密码“1234”—保存(服务器权限自行定义)。
④点选新建的用户 xmuser—编辑用户—权限—添加权限--选择数据库
xunmei,添加相应权限(可不全选),如图1.1所示:
⑥设置到此完成。为了验证我们的设置是否正确,我们可以用刚才建立的用户
xmuser 和密码 1234 来连接 localhost 主机地址(方法:关闭连接
MySQL,该连接属于最高权限用户 root。我们用新用户新建一个到 localhost
的连接来模拟不同用户使用数据库的过程)。连上后,可使用用户 xmuser
对数据库 xunmei
或其他数据库进行操作,看是否与自己设置的权限相吻合。(可只添加添加少量权限,然后尝试在
xunmei 里进行操作,看是否能成功)。
按:这里要注意 Server Privileges
和
Privileges
的使用,Server Privileges
的权限是很大的,一般来说,我们只需要操作
Privileges
,不然,可能会出现 Privileges
被
Server Privileges
覆盖的情况。
三、课后练习题
1、使用两个不同的用户通过 Navicat 和查询分析器查看 world 数据库中
country、city 两个表的所有数据。
2、删除用户 xmuser,尝试新建另一个用户来管理数据库、表等:
添加新用户对数据库 world
的权限,比较在有无相关权限的情况之下进行操作的区别:
- ① Create。尝试新建表
- ② Update。尝试修改表数据或结构
- ③ Select。尝试查询表
- ④ Alt。尝试修改表
- ⑤ Drop。尝试删除表
新建用户 fanyfull,密码 1234。
有权限的情况下:
没有权限:
四、思考题
1、解释 10 个数据库操作权限的含义和影响。
参考:MySQL
8 docs