第1关:执行 CREATE USER 创建以2022100904为用户名的用户,同时设置其密码为root1234

#请在此处添加实现代码
########## Begin ##########
CREATE USER '2022100904'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root1234';########## End ##########
#以下代码禁止删除
SELECT mysql.user.Host, mysql.user.User FROM mysql.user WHERE USER = '2022100904';

第2关:给予创建的用户2022100904在mydata数据库中授予"J" 表 SELECT 权限(注意创建权限时的用户名为'用户名'@'localhost'),不允许转授此权限给其它用户。

USE mydata;#请在此处添加实现代码
########## Begin ##########grant select on mydata.J to '2022100904'@'localhost';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR '2022100904'@'localhost';

第3关:给予创建的用户2022100904、2022100908在mydata数据库中授予"J" 表 ALL PRIVILEGES权限(注意创建权限时的用户名为'用户名'@'localhost'),不允许转授此权限给其它用户。

USE mydata;#请在此处添加实现代码
########## Begin ##########
grant all on mydata.J to '2022100904'@'localhost';grant all on mydata.J to '2022100908'@'localhost';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR '2022100904'@'localhost';
SHOW GRANTS FOR '2022100908'@'localhost';

第4关:给予创建的用户2022100904在mydata数据库中授予“J”表的UPDATE和INSERT权限,允许转授此权限给其它用户。

工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。 J表如下图:

USE mydata;#请在此处添加实现代码
########## Begin ##########
grant update,insert on mydata.J to '2022100904'@'localhost' with grant option;########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR '2022100904'@'localhost';

第5关:回收用户2022100904在mydata数据库中授予的 "J" 表 SELECT权限(回收权限时的用户名为'用户名'@'localhost')。

USE mydata;#请在此处添加实现代码
########## Begin ##########
revoke select on mydata.J from '2022100904'@'localhost';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR '2022100904'@'localhost';

第6关:回收账号2022100904、2022100908在mydata数据库的中授予 的J表ALL PRIVILEGES权限(注意回收权限时的用户名为'用户名'@'localhost')

USE mydata;#请在此处添加实现代码
########## Begin ##########
revoke all on mydata.J from '2022100904'@'localhost';revoke all on mydata.J from '2022100908'@'localhost';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR '2022100904'@'localhost';
SHOW GRANTS FOR '2022100908'@'localhost';

第7关:回收用户2022100904在mydata数据中授予的“J”表UPDATE和INSERT的权限。(注意回收权限时的用户名为'用户名'@'localhost')

USE mydata;#请在此处添加实现代码
########## Begin ##########
revoke update,insert on mydata.J from '2022100904'@'localhost';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR '2022100904'@'localhost';

第8关:创建角色 'R1'

#请在此处添加实现代码
########## Begin ##########
create role 'R1';########## End ##########
#以下代码禁止删除
SELECT mysql.user.Host, mysql.user.User FROM mysql.user WHERE USER = 'R1';

第9关:给予创建的角色R1在mydata数据库中授予"J" 表 的SELECT 、UPDATE、INSERT权限。

USE mydata;#请在此处添加实现代码
########## Begin ##########
grant select,update,insert on mydata.J to 'R1';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR 'R1';

第10关:给予创建的用户2022100904授予角色R1权限。

USE mydata;#请在此处添加实现代码
########## Begin ##########
grant 'R1' to '2022100904'@'localhost';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR '2022100904'@'localhost';

第11关:给予已授权限的角色R1在mydata数据库中再次授予"J" 表 的DELETE权限。

USE mydata;#请在此处添加实现代码
########## Begin ##########
grant delete on mydata.J to 'R1';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR 'R1';

第12关:回收角色R1 对 J表的 INSERT 权限。

USE mydata;#请在此处添加实现代码
########## Begin ##########
revoke insert on mydata.J from 'R1';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR 'R1';

第13关:通过角色R1回收用户2022100904的被授予J表的SELECT 、UPDATE、INSERT权限。

USE mydata;#请在此处添加实现代码
########## Begin ##########
revoke 'R1' from '2022100904'@'localhost';########## End ##########
#以下代码禁止删除
SHOW GRANTS FOR '2022100904'@'localhost';

第14关:编写一个名为INSERT_S的触发器,在S表执行 INSERT 语句后被激发,此触发器将新供应商的SNO、SNAME、STATUS、CITY及执行此操作的用户(USER)插入N_S表,N_S表比S表增添操作用户一列。

供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:

N_S表由供应商的SNO、SNAME、STATUS、CITY及执行此操作的用户USER组成,现已构建该表,结构信息如下:

Mysql触发器语法:

创建触发器样例:删除tab1表记录后自动将tab2表中对应的记录删去。

USE mydata;#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE TRIGGER INSERT_S
AFTER INSERT ON S
FOR EACH ROW
BeginINSERT INTO N_S(SNO,SNAME,STATUS,CITY,USER) VALUES('S6','深技大','20','深圳','root@localhost');
END$
DELIMITER ;########## End ##########
#以下代码禁止删除
#将记录插入S表
INSERT INTO S VALUES ('S6', '深技大', '20', '深圳');
#查看N_S表
SELECT * FROM N_S;

第15关:编写一个名为UPDATE_S的触发器,检查S表的STATUS,只允许0-100之间,超过100后,改为100。

供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成. S表如下图:

Mysql触发器语法:

创建触发器样例:删除tab1表记录后自动将tab2表中对应的记录删去。

注意:

USE mydata;#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE TRIGGER UPDATE_S
BEFORE UPDATE ON S
FOR EACH ROW
BEGIN IF(NEW.STATUS <0) OR (NEW.STATUS>100)THEN SET NEW.STATUS=100;END IF;
END$
DELIMITER ;
########## End ##########
#以下代码禁止删除
#更新S表
UPDATE S SET S.STATUS = 300 WHERE S.CITY = '天津';
#查看S表
SELECT * FROM S;

第16关:编写一个名为UPDATE_SPJ的触发器,当SPJ表中有更新某条记录时,自动更新表SPJ_SUMQTY表。

供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:

PJ_SUMQTY表为工程零件数量统计表,由工程项目代码(JNO)、零件代码(PNO)、统计供应数量SUMQTY组成,其中SUMQTY由SPJ表中的工程项目代码(JNO)、零件代码(PNO)、供应数量(QTY),根据JNO、PNO汇总得到。 SPJ_SUMQTY表如下图:

Mysql触发器语法:

USE mydata;#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE TRIGGER UPDATE_SPJ
AFTER UPDATE ON SPJ
FOR EACH ROW
BEGINUPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY + NEW.QTY - OLD.QTY WHERE PNO = NEW.PNO AND JNO = NEW.JNO;
END $
DELIMITER ;########## End ##########
#以下代码禁止删除
#更新SPJ表
UPDATE SPJ SET SPJ.QTY = SPJ.QTY + 200 WHERE SPJ.JNO = 'J5';
#查看SPJ_SUMQTY表
SELECT * FROM SPJ_SUMQTY;

第17关:编写一个名为DELETE_SPJ的触发器,当SPJ表中有删除某条记录时,自动更新表SPJ_SUMQTY表。

供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:

SPJ_SUMQTY表为工程零件数量统计表,由工程项目代码(JNO)、零件代码(PNO)、统计供应数量SUMQTY组成,其中SUMQTY由SPJ表中的工程项目代码(JNO)、零件代码(PNO)、供应数量(QTY)根据JNO、PNO汇总得到。 SPJ_SUMQTY表如下图:

USE mydata;#请在此处添加实现代码
########## Begin ##########
DELIMITER $$
CREATE TRIGGER DELETE_SPJ
AFTER DELETE ON SPJ
FOR EACH ROW
BEGINUPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY - OLD.QTY WHERE SPJ_SUMQTY.PNO = OLD.PNO AND SPJ_SUMQTY.JNO = OLD.JNO;DELETE FROM SPJ_SUMQTY WHERE SPJ_SUMQTY.SUMQTY <=0;
END $$
DELIMITER ;########## End ##########
#以下代码禁止删除
#删除SPJ表的某条记录
DELETE FROM SPJ WHERE SPJ.SNO = 'S2' AND SPJ.PNO = 'P3' AND SPJ.JNO = 'J5';
DELETE FROM SPJ WHERE SPJ.SNO = 'S2' AND SPJ.PNO = 'P3' AND SPJ.JNO = 'J1';
#查看SPJ_SUMQTY表
SELECT * FROM SPJ_SUMQTY;

第18关:编写一个名为INSERT_SPJ的触发器,当SPJ表中有插入某条记录时,自动更新表SPJ_SUMQTY表。

供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:

SPJ_SUMQTY表为工程零件数量统计表,由工程项目代码(JNO)、零件代码(PNO)、统计供应数量SUMQTY组成,其中SUMQTY由SPJ表中的工程项目代码(JNO)、零件代码(PNO)、供应数量(QTY)根据JNO、PNO汇总得到。 SPJ_SUMQTY表如下图:

USE mydata;#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE TRIGGER INSERT_SPJ
AFTER INSERT ON SPJ
FOR EACH ROW
BEGINUPDATE SPJ_SUMQTY SET SUMQTY = SUMQTY + NEW.QTY WHERE SPJ_SUMQTY.PNO = NEW.PNO AND SPJ_SUMQTY.JNO =NEW.JNO;IF NEW.JNO NOT IN (SELECT JNO FROM SPJ_SUMQTY)OR NEW.PNO NOT IN (SELECT PNO FROM SPJ_SUMQTY)THEN INSERT INTO SPJ_SUMQTY VALUES (NEW.JNO,NEW.PNO,NEW.QTY);END IF;
END $
DELIMITER ;########## End ##########
#以下代码禁止删除
#将记录插入SPJ表
INSERT INTO SPJ VALUES ('S6', 'P1', 'J6', 200);
INSERT INTO SPJ VALUES ('S6', 'P3', 'J5', 300);
#查看SPJ_SUMQTY表
SELECT * FROM SPJ_SUMQTY;

数据库系统头歌实验八 数据库完整性、安全设计相关推荐

  1. 数据库系统头歌实验二 SQL的多表查询

    第一关:等值连接:求S表和J表城市相同的等值连接(列顺序还是按照S.J表) 工程项目表J由工程项目代码(JNO).工程项目名(JNAME).工程项目所在城市(CITY)组成. 供应商表S由供应商代码( ...

  2. 数据结构头歌实验梳理

    数据结构头歌实验梳理 实验一 算法表示与实现基础 1 数据交换 2 最大最小值问题 3 ADT-Complex 数据结构与算法 - 线性表 1 实现一个顺序存储的线性表 2 实现一个链接存储的线性表 ...

  3. Java头歌实验梳理

    Java头歌实验梳理 实验一:JAVA编程基础 编写一个简单Java程序,计算银行年存款的本息 编写程序完成矩阵的乘法运算 编写程序用*号输出等腰梯形 实验二:字符串 字符串的值转换成浮点型 字符转换 ...

  4. 实验五 数据库完整性(详细解释+错误修正版)

    /* 实验五  数据库完整性(详细解释+错误修正版) [实验目的] 1.掌握实体完整性约束.参照完整性约束 2.灵活应用自定义完整性约束 3.了解触发器在自定义完整性中的应用 [实验内容] 一.定义一 ...

  5. AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台

    AlphaBeta剪枝算法求解博弈树最优选择 头歌实验平台 前言 一.AlphaBeta剪枝是什么? 1.由来, 最大最小决策树 2.发展 3. AlphaBeta剪枝 二.实验算法伪代码 三.实验算 ...

  6. 实验五 数据库完整性技术

    [实验目的] 1.掌握完整性的概念: 2.熟悉SQL SERVER 的完整性技术. 3.了解SQL SERVER 的违反完整性处理措施. [实验性质] 综合性实验 [实验导读] 1.完整性概述 数据库 ...

  7. 数据库原理 头歌实训 数据库常用对象

    SQL视图的定义与操纵 第1关:创建行列子集视图 任务描述 本关任务:创建计算机系的学生信息的视图 student_cs. 相关知识 行列子集视图是指视图的结果集来源于基本表,没有经过二次计算. ## ...

  8. Linux操作系统实用功能,简单易操作 头歌实验一

    2022头歌平台操作系统实验一 实验(1):Linux操作系统基本使用 实验(2):Linux之C编程入门 文章目录 2022头歌平台操作系统实验一 前言 一.Linux操作系统基本使用 二.C编程入 ...

  9. 数据库系统概论 ---- 第五章 -- 数据库完整性

    文章目录 第五章 -- 数据库完整性 5.1 实体完整性 5.1.1 定义实体完整性 5.1.2 实体完整性检查和违约处理 5.2 参照完整性 5.2.2 参照完整性检查和违约处理 5.3 用户定义的 ...

最新文章

  1. python散点图拟合曲线-【python常用图件绘制#01】线性拟合结果图
  2. 分布式内存数据库---redis配置文件常用配置介绍
  3. c++指定枚举占一个字节
  4. spark学习笔记-CentOS 6.4集群搭建(2)
  5. Python Tricks(十一)—— 阶乘的实现
  6. BZOJ4029: [HEOI2015]定价
  7. 【牛客练习44:C】小y的质数(求区间内k生互斥数对数---容斥原理+质因子分解)
  8. 前端入门 前端实战项目 JS
  9. cad2017单段线_CAD制图规定-2017最新版.doc
  10. Reflector dll反编译工具
  11. linux系统中文件不同颜色的含义
  12. python 绘图如何画螺旋圈_如何画出python螺旋线
  13. 黑科技解密!实现socket进程间迁移!
  14. win10系统添加安装打印机教程
  15. 在本计算机无法启动用友通服务器,用友通客户端连接不上服务器解决方案
  16. BGP/MPLS VS VPLS
  17. 机械臂—ROS下UR10e+ft300+2f-140gripper ur机械臂配置夹爪及问题解决
  18. 读CSV和狗血的分隔符问题,附解决方法!
  19. 条码标签编辑软件如何选择?
  20. 【组合逻辑电路】——编码器

热门文章

  1. 结构体复数相乘c语言,复数乘法中的结构体赋值实现代码
  2. 解决catkin_make时出现make[2]: *** No rule to make target ‘/usr/lib/libOpenNI2.so‘, needed by ‘*******‘。
  3. 利用C++求解一元二次方程
  4. 大尺寸图片的性能和内存优化
  5. python——颜文字emoji
  6. 如何将卫星影像或者航拍影像叠加到CAD设计图上(Auto CAD版)
  7. 在虚拟机中开启VT功能
  8. 微信小程序登录注册demo+java服务器(一)
  9. 《UEFI内核导读》全集,2023年更新
  10. IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)