mysql数据库用户名更改后视图_MySQL 学习笔记(二):数据库更新、视图和数据控制...

基础准备:

在 school 数据库下建立student、course、sc 三个表:

create tablestudent(

Snochar(9) primary key,

Snamechar(20) unique,

Ssexchar(2),

Sageint,

Sdeptchar(20));create tableCourse(

Cnochar(4) primary key,

Cnamechar(40),

Cpnochar(4),

Ccreditint);create tableSC(

Snochar(9),

Cnochar(4),

Gradeint,primary key(Sno,Cno),foreign key (sno) referencesStudent(sno),foreign key (Cno) referencesCourse(Cno));insert into student values ('95001','李勇','男',20,'CS');insert into student values ('95002', '刘晨','女',19,'IS');insert into student values('95003', '王敏', '女',18, 'MA');insert into student values('95004', '张立', '男',19, 'IS');insert into Course values(1,'数据库', 5,4);insert into Course values(2, '数学', 3 ,2);insert into Course values(3, '信息系统', 1, 4);insert into Course values('4', '操作系统', '6', 3);insert into Course values('5', '数据结构', '7', 4);insert into Course values('6', '数据处理', '', 2);insert into Course values('7', 'PASCAL语言', '6', 4);insert into SC values('95001', '1', 92);insert into SC values('95001', '2', 85);insert into SC values('95001', '3', 88);insert into SC values('95002', '2', 90);insert into SC values('95002', '3', 80);

(一)数据库更新

1. 在school数据库中,确保表之间已经建立关系,用企业管理器建立数据库的关系图(Diagrams)

2. 在course 表中删除cno=1的记录,有什么结果?

报错:因为有外键约束。

3. 编辑course表和 sc表之间的关系,添加级联删除相关记录和级更新相关记录

create tableSC(

Snochar(9),

Cnochar(4),

Gradeint,primary key(Sno,Cno),foreign key (sno) references Student(sno) on delete cascade on update cascade,foreign key (Cno) references Course(Cno);

重复2的操作,观察course 表和 sc表的变化,有什么结果,为什么?

没有报错,成功删除 cno = 1行。

4. 将course表和sc表的课程号为2的都改为22,如何做?(提示:在Diagrams中编辑course表和 sc表之间的关系,选择级联更新相关记录cascade update related fields)

update sc set cno=22 where cno=2;update course set cno=22 where cno=2;

5. 在SC表中,

(1)将95002同学的成绩都减少10%

update sc set course=80 where sno=95002;

(2) 课程号为3的改为33

update sc set cno=33 where cno=3;

改不了。不能修改子表,只能修改主表。

6.

(1) 在STUDENT表中插入一条新纪录:  95006   李三   男   21   IS

insert into student (sno, sname, ssex, sage, sdept) values (95006,'李三','男',21,'IS');

2)在SC表中插入一条新纪录: 95008       3    80

insert into student (sno, cno, grade) values (95008, 3, 80);

出错,因为不能修改子表,只能修改主表。

(二)建立新用户和数据控制管理

使用命令行界面:

1.创建用户:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器。

2.授权:

GRANT privileges ON databasename.tablename TO 'username'@'host'

说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*.

例子:

create user stu1@localhost identified by 'stu1';grant create view on school.* to stu1@localhost;

当创建过程没问题,提示 Can't find any matching row in the user table

记得刷新一下: flush privileges;

3.建立存储过程和函数 建立存储过程sp1

mysql>delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)

mysql> create proceduresp1()-> begin

-> grant create view on school.* to stu2@localhost;-> grant select,update,insert,delete on school.student to stu2@localhost;-> grant select,update,insert,delete on school.course to stu2@localhost;-> grant select,update,insert,delete on school.sc to stu2@localhost;-> end$$

mysql> delimiter ; #将语句的结束符号恢复为分号

建立存储过程sp2

mysql>delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)

mysql> create proceduresp2()-> begin

-> grant select on school.student to stu1@localhost;-> grant select on school.course to stu1@localhost;-> grant select on school.sc to stu1@localhost;-> grant insert on school.student to stu1@localhost, stu2@localhost;-> grant update(Ccredit) on course tostu1;-> end$$

建立存储过程sp3

mysql>delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)

mysql> create proceduresp3()-> begin

-> revoke select on school.student from stu1@localhost;-> revoke select on school.course from stu1@localhost;-> revoke select on school.sc from stu1@localhost;-> end$$

mysql> delimiter ; #将语句的结束符号恢复为分号

grant 语句赋予权限,revoke 语句取消权限。

撤销已经赋予给 MySQL 用户权限的权限revoke

revoke all on *.* from dba@localhost;

和grant类似,只需将关键字to换成from,同样可以针对特定用户特定库撤销特定权限。

MySQL 删除存储过程和函数:

基本的语法格式如下:

DROP {PROCEDURE|FUNCTION} sp_name;

其中,sp_name参数表示存储过程或函数的名称。

删除存储过程test。SQL代码如下:

drop procedure if exists test;

执行存储过程sp1(), sp2(), sp3()

call sp1();

call sp2();

call sp3();

(三) 视图建立和操作

1.将查询超过18岁的学生的结果建立视图view1,所有男同学的结果建立view2

create view view1 as select * from student where sage>18;create view view2 as select * from student where ssex='男';

A.在student中,将CS 改为CC,  view1,view2 有没有同步更改?

update student set sdept='cc' where sdept='cs';

同步更改了。

B.在view1中将女同学改为男同学,student 及view2有没有同步修改?

update view1 set ssex='男' where ssex='女';

同步更改了。

2. 将查询成绩及格(>=60)的姓名、系名、课程名和成绩的结果建立视图V1

然后对视图V1进行update, delete和insert操作,观察student,course和 sc三张基表的变化.

create view v1 as

select student.sname,student.sdept,course.cname,sc.grade fromstudent,sc,coursewhere student.sno=sc.sno and course.cno=sc.cnoand grade>=60;

A.在student,course和 sc三表中进行update, delete和insert操作(自己设计测试用例),观察V1视图的变化.    同步变化

B.在V1视图中进行update, delete和insert操作(自己设计测试用例),观察student,course和 sc三张基表的变化.    同步变化

3.将查询超过平均成绩的学号、课程号及成绩的结果建立一个视图V2

create view v2 as select sno, cno,grade from sc where grade >(select avg(grade) from sc)

A.在sc表中进行update, delete和insert操作(自己设计测试用例),观察V2视图的变化.     同步变化

B.在V2视图中进行update, delete和insert操作(自己设计测试用例),观察sc基表的变化,并且分析原因.     同步变化

**结论:view视图是基于表的,当表中的内容更改时,视图中的内容也会更改,当更改视图时,同样表中的内容也会更改,二者互相关联。

交互式SQL的使用 环境:WINDOWS,Microsoft SQL Server 实验要求: 1,创建Student数据库,包括Students,Courses,SC表,表结构如下: Students(SNO,SNAME,SEX,BDATE,HEIGHT,DEPARTMENT) Courses(CNO,CNAME,LHOUR,CREDIT,SEMESTER) SC(SNO,CNO,GRADE) (注:下划线表示主键,斜体表示外键),并插入一定数据。 2.完成如下的查询要求及更新的要求。 (1)查询身高大于1.80m的男生的学号和姓名; (2)查询计算机系秋季所开课程的课程号和学分数; (3)查询选修计算机系秋季所开课程的男生的姓名、课程号、学分数、成绩; (4)查询至少选修一门电机系课程的女生的姓名(假设电机系课程的课程号以EE开头); (5)查询每位学生已选修课程的门数和总平均成绩; (6)查询每门课程选课的学生人数,最高成绩,最低成绩和平均成绩; (7)查询所有课程的成绩都在80分以上的学生的姓名、学号、且按学号升序排列; (8)查询缺成绩的学生的姓名,缺成绩的课程号及其学分数; (9)查询有一门以上(含一门)三个学分以上课程的成绩低于70分的学生的姓名; (10)查询1984年~1986年出生的学生的姓名,总平均成绩及已修学分数。 (11) 在STUDENT和SC关系中,删去SNO以’01’开关的所有记录。 (12)在STUDENT关系中增加以下记录: (13)将课程CS-221的学分数增为3,讲课时数增为60 3.补充题: (1) 统计各系的男生和女生的人数。 (2) 列出学习过‘编译原理’,‘数据库’或‘体系结构’课程,且这些课程的成绩之一在90分以上的学生的名字。 (3) 列出未修选‘电子技术’课程,但选修了‘数字电路’或‘数字逻辑’课程的学生数。 (4) 按课程排序列出所有学生的成绩,尚无学生选修的课程,也需要列出,相关的学生成绩用NULL表示。 (5) 列出平均成绩最高的学生名字和成绩。(SELECT句中不得使用TOP n子句) 4.选做题:对每门课增加“先修课程”的属性,用来表示某一门课程的先修课程,每门课程应可记录多于一门的先修课程。要求: 1) 修改表结构的定义,应尽量避免数据冗余,建立必要的主键,外键。 2) 设计并插入必要的测试数据,完成以下查询: 列出有资格选修数据库课程的所有学生。(该学生已经选修过数据库课程的所有先修课,并达到合格成绩。) 注意:须设计每个查询的测试数据,并在查询之前用INSERT语句插入表中。 提交作业形式: 1) 建立Student数据库的SQL脚本,插入所有数据项的SQL脚本(包括所有的测试数据)。 2) 完成查询要求的SQL语句脚本。 3) 选做题:须提交修改数据库表定义的SQL脚本,插入测试数据的SQL脚本以及用于查询的SQL语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值