使用sql语句在SQL Server 环境中授予stu1对sc表具有select和insert权限,授予stu1对s表具有select,update, insert和delete权限, 授予stu1对c表具有select,update,insert和delete权限。
时间: 2024-02-23 14:02:08 浏览: 65
授予stu1对sc表具有select和insert权限:
```
GRANT SELECT, INSERT ON sc TO stu1;
```
授予stu1对s表具有select,update, insert和delete权限:
```
GRANT SELECT, UPDATE, INSERT, DELETE ON s TO stu1;
```
授予stu1对c表具有select,update,insert和delete权限:
```
GRANT SELECT, UPDATE, INSERT, DELETE ON c TO stu1;
```
以上是SQL Server中授予权限的语法,其中GRANT关键字表示授权,后面跟着具体的权限和被授权的用户或角色。
相关问题
生成代码sql视图 使用企业管理器创建视图 : ① 在stu库中以“student”表为基础,建立MA系学生的视图V_MAStudent ② 建立一个所有IS系学生的班级号、学号以及其平均成绩的视图COMPUTE_AVG_GRADE; (2) 使用SQL语句创建视图: ① 建立一个每个学生的学号、姓名、选修的课号、课名及成绩的视图S_C_GRADE; ② 建立IS系选修了1号课程且成绩在90分以上的学生的视图V_IS_Score ③ 将各系学生人数,平均年龄定义为视图V_NUM_AVG。 (3) 查询以上所建的视图结果 (4) 查询选修了1号课程的学生 (5) 在MA系学生的视图中找出年龄小于20岁的学生 (6) 将数学系学生视图V_MAStudent中班级号为1,学号1的学生姓名改为“王武” (7)向数学系学生视图V_MAStudent中插入一个新的学生记录,其中班级号为1,学号为6,姓名为赵新,年龄为20岁 (8) 删除数学系学生视图V_MAStudent班级号为1,学号为6的记录 (9) 用企业管理器删除视图“V_MAStudent” (10) 用SQL语句删除视图S_C_GRADE
以下是生成代码 SQL 视图的示例:
(1) 使用企业管理器创建视图:
① 在 stu 库中以“student”表为基础,建立 MA 系学生的视图 V_MAStudent:
在企业管理器中找到 stu 库,右键点击“Views”,选择“New View...”打开视图设计器,然后按照以下步骤创建视图:
- 在“Add Table”对话框中选择 student 表,点击“Add”按钮添加该表。
- 在视图设计器的“Diagram”面板中选择 student 表,然后在其上方的“Criteria”面板中输入“department = 'MA'”筛选条件。
- 在视图设计器的“Properties”面板中输入视图名称“V_MAStudent”。
最终生成代码如下:
```sql
CREATE VIEW V_MAStudent AS
SELECT *
FROM student
WHERE department = 'MA';
```
② 建立一个所有 IS 系学生的班级号、学号以及其平均成绩的视图 COMPUTE_AVG_GRADE:
同样在视图设计器中按照以下步骤创建视图:
- 添加 student 表和 sc 表,并通过班级号和学号将它们连接起来。
- 在“Columns”面板中选择需要显示的列,包括班级号、学号和平均成绩。
- 在“Group By”面板中选择班级号和学号,以便计算平均成绩。
最终生成代码如下:
```sql
CREATE VIEW COMPUTE_AVG_GRADE AS
SELECT sc.class_id, sc.student_id, AVG(sc.score) AS avg_grade
FROM student s
INNER JOIN sc ON s.id = sc.student_id
WHERE s.department = 'IS'
GROUP BY sc.class_id, sc.student_id;
```
(2) 使用 SQL 语句创建视图:
① 建立一个每个学生的学号、姓名、选修的课号、课名及成绩的视图 S_C_GRADE:
```sql
CREATE VIEW S_C_GRADE AS
SELECT student.id AS student_id, student.name AS student_name, course.id AS course_id, course.name AS course_name, sc.score
FROM student
INNER JOIN sc ON student.id = sc.student_id
INNER JOIN course ON sc.course_id = course.id;
```
② 建立 IS 系选修了 1 号课程且成绩在 90 分以上的学生的视图 V_IS_Score:
```sql
CREATE VIEW V_IS_Score AS
SELECT student.id, student.name, sc.score
FROM student
INNER JOIN sc ON student.id = sc.student_id
WHERE student.department = 'IS' AND sc.course_id = 1 AND sc.score >= 90;
```
③ 将各系学生人数、平均年龄定义为视图 V_NUM_AVG:
```sql
CREATE VIEW V_NUM_AVG AS
SELECT department, COUNT(*) AS num_students, AVG(age) AS avg_age
FROM student
GROUP BY department;
```
(3) 查询以上所建的视图结果:
查询 V_MAStudent 视图:
```sql
SELECT * FROM V_MAStudent;
```
查询 COMPUTE_AVG_GRADE 视图:
```sql
SELECT * FROM COMPUTE_AVG_GRADE;
```
查询 S_C_GRADE 视图:
```sql
SELECT * FROM S_C_GRADE;
```
查询 V_IS_Score 视图:
```sql
SELECT * FROM V_IS_Score;
```
查询 V_NUM_AVG 视图:
```sql
SELECT * FROM V_NUM_AVG;
```
(4) 查询选修了 1 号课程的学生:
```sql
SELECT *
FROM student
WHERE id IN (
SELECT student_id
FROM sc
WHERE course_id = 1
);
```
(5) 在 MA 系学生的视图中找出年龄小于 20 岁的学生:
```sql
SELECT *
FROM V_MAStudent
WHERE age < 20;
```
(6) 将数学系学生视图 V_MAStudent 中班级号为 1,学号为 1 的学生姓名改为“王武”:
```sql
UPDATE V_MAStudent
SET name = '王武'
WHERE class_id = 1 AND id = 1;
```
(7) 向数学系学生视图 V_MAStudent 中插入一个新的学生记录,其中班级号为 1,学号为 6,姓名为赵新,年龄为 20 岁:
```sql
INSERT INTO V_MAStudent (class_id, id, name, age, gender, department)
VALUES (1, 6, '赵新', 20, '男', 'MA');
```
(8) 删除数学系学生视图 V_MAStudent 班级号为 1,学号为 6 的记录:
```sql
DELETE FROM V_MAStudent
WHERE class_id = 1 AND id = 6;
```
(9) 用企业管理器删除视图“V_MAStudent”:
在企业管理器中找到 V_MAStudent 视图,右键点击它,选择“Delete”删除该视图。
(10) 用 SQL 语句删除视图 S_C_GRADE:
```sql
DROP VIEW S_C_GRADE;
```
47.创建一个触发器T_sc1,要求每当在stucou表中插入数据时,向客户端显示一条“记录已添加!”的消息。 48.创建一个触发器T_stu,要求每当用户删除student表的记录时,自动显示被删除记录的内容 49.利用IF UPDATE建立一个触发器T_course,在course表上修改课程类别时,显示信息“课程类别已修改”。 50.创建触发器T_stcour,实现当插入、更新和删除stucou表的选课数据行时,能同时更新Course表中相应的选课人数WillNum. 51.若批量插入、更新和删除stucou表的选课数据行时,修改上题的触发器 52.创建一个触发器T_sc2,要求每当在stucou表中插入数据时,向客户端显示一条“记录添加二次触发”的消息。(知识点:多个触发器) 53.创建一个数据库stuxk,将XK数据库中的表导入其中。 54.为某个系创建一个视图V_elec. 55.为数据库stuxk创建三个用户user1,user2和user3 56.将视图V_elec的查询权限给用户user2和user3.
对于问题47-52,这些问题涉及到数据库触发器的创建和修改,需要针对具体的数据库系统进行实现,例如MySQL、SQL Server、Oracle等。以下是一些通用的SQL语句,仅供参考:
47. 创建触发器T_sc1:
```sql
CREATE TRIGGER T_sc1
AFTER INSERT ON stucou
FOR EACH ROW
BEGIN
SELECT '记录已添加!';
END;
```
48. 创建触发器T_stu:
```sql
CREATE TRIGGER T_stu
AFTER DELETE ON student
FOR EACH ROW
BEGIN
SELECT CONCAT('被删除的记录内容为:', OLD.col1, ',', OLD.col2, ',', ...);
END;
```
49. 创建触发器T_course:
```sql
CREATE TRIGGER T_course
AFTER UPDATE ON course
FOR EACH ROW
IF UPDATE(category)
THEN
SELECT '课程类别已修改';
END IF;
```
50. 创建触发器T_stcour:
```sql
CREATE TRIGGER T_stcour
AFTER INSERT, UPDATE, DELETE ON stucou
FOR EACH ROW
BEGIN
IF INSERTING THEN
UPDATE Course SET WillNum = WillNum + 1 WHERE CourseID = NEW.CourseID;
ELSIF UPDATING THEN
UPDATE Course SET WillNum = WillNum + 1 WHERE CourseID = NEW.CourseID;
UPDATE Course SET WillNum = WillNum - 1 WHERE CourseID = OLD.CourseID;
ELSIF DELETING THEN
UPDATE Course SET WillNum = WillNum - 1 WHERE CourseID = OLD.CourseID;
END IF;
END;
```
51. 修改触发器T_stcour,支持批量操作:
```sql
CREATE TRIGGER T_stcour
AFTER INSERT, UPDATE, DELETE ON stucou
FOR EACH ROW
BEGIN
DECLARE cnt INT;
IF INSERTING THEN
SELECT COUNT(*) INTO cnt FROM inserted;
UPDATE Course SET WillNum = WillNum + cnt WHERE CourseID = NEW.CourseID;
ELSIF UPDATING THEN
SELECT COUNT(*) INTO cnt FROM inserted;
UPDATE Course SET WillNum = WillNum + cnt WHERE CourseID = NEW.CourseID;
SELECT COUNT(*) INTO cnt FROM deleted;
UPDATE Course SET WillNum = WillNum - cnt WHERE CourseID = OLD.CourseID;
ELSIF DELETING THEN
SELECT COUNT(*) INTO cnt FROM deleted;
UPDATE Course SET WillNum = WillNum - cnt WHERE CourseID = OLD.CourseID;
END IF;
END;
```
52. 创建触发器T_sc2,实现多个触发器:
```sql
CREATE TRIGGER T_sc1
AFTER INSERT ON stucou
FOR EACH ROW
BEGIN
SELECT '记录已添加!';
END;
CREATE TRIGGER T_sc2
AFTER INSERT ON stucou
FOR EACH ROW
BEGIN
SELECT '记录添加二次触发';
END;
```
对于问题53,可以使用以下命令将XK数据库中的表导入到stuxk数据库中:
```sql
USE stuxk;
SOURCE /path/to/XK.sql;
```
其中,/path/to/XK.sql表示XK数据库的SQL脚本文件路径。
对于问题54和55,可以使用以下SQL语句创建视图和用户:
```sql
-- 创建视图V_elec
CREATE VIEW V_elec AS
SELECT col1, col2, ... FROM table WHERE condition;
-- 创建用户user1、user2和user3
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'user2'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'user3'@'localhost' IDENTIFIED BY 'password';
```
其中,'password'表示用户的密码,可以根据实际情况进行修改。
对于问题56,可以使用以下命令将视图V_elec的查询权限授予用户user2和user3:
```sql
GRANT SELECT ON stuxk.V_elec TO 'user2'@'localhost';
GRANT SELECT ON stuxk.V_elec TO 'user3'@'localhost';
```
阅读全文