db第五章实验作业


第五章实验部分作业

1

# (1)创建用户王明,并授予他对学生表的SELECT权限
CREATE USER '王明'@'localhost' IDENTIFIED BY '123456';
GRANT SELECT ON 学生 TO '王明'@'localhost';
# (2)授予用户王明对学生表的INSERT和DELETE权限
GRANT INSERT, DELETE ON 学生 TO '王明'@'localhost';
# (3)授予用户王明对选课表的SELECT权限和对成绩字段的UPDATE权限
GRANT SELECT, UPDATE(成绩) ON 选课 TO '王明'@'localhost';
# (4)授予用户王明创建表的权限
GRANT CREATE ON *.* TO '王明'@'localhost';
# (5)授予用户王明对学生表的所有权限,并具有转授给他人的权力。
GRANT ALL ON 学生 TO '王明'@'localhost' WITH GRANT OPTION;
# (6)撤销用户王明对学生表的INSERT和DELETE权限
REVOKE INSERT, DELETE ON 学生 FROM '王明'@'localhost';
# (7)撤销用户王明对选课表的SELECT权限和对成绩字段的UPDATE权限
REVOKE SELECT, UPDATE(成绩) ON 选课 FROM '王明'@'localhost';
# (8)撤销用户王明创建表的权限
REVOKE CREATE ON *.* FROM '王明'@'localhost';
# (9)使得用户王明只能查看每个班级的最高分、最低分、平均分,但不能查看每个学生所选课程的具体成绩。
CREATE VIEW 班级统计数据 AS
SELECT 学生.系号, MAX(选课.成绩) AS 最高分, MIN(选课.成绩) AS 最低分, AVG(选课.成绩) AS 平均分 FROM 学生
JOIN 选课 ON 学生.学号 = 选课.学号
GROUP BY 学生.系号;

GRANT SELECT ON 班级统计数据 TO '王明'@'localhost';

执行结果如下:
执行结果

2

CREATE TABLE 员工表(
工号 INT PRIMARY KEY,
姓名 VARCHAR(50),
每月工资 FLOAT
);

INSERT INTO 员工表(工号, 姓名, 每月工资) VALUES (1, '张三', 10000);

DELIMITER //

CREATE TRIGGER 工资修改约束
BEFORE UPDATE ON 员工表
FOR EACH ROW
BEGIN
IF NEW.每月工资 < OLD.每月工资 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '工资不能降低!';
end if;
end;
//
DELIMITER ;

UPDATE 员工表 SET 每月工资 = 5000 WHERE 工号 = 1;

测试结果如下

image-20241107171704502


Author: CuberSugar
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source CuberSugar !
  TOC