数据库实践作业二资料整合

Created at 2018-05-25 Updated at 2018-06-26 Category Study Tag MySQL

根据实验课的题目要求,共需要掌握以下部分:

  • 用户及用户权限管理
  • 存储及触发器使用
  • 数据库的备份与恢复

以下部分将是很基础的数据库操作,存在许多不足需要改正。


用户及用户权限管理

前提:熟悉课本第四章内容

我们在ROOT用户下创建普通用户

1
2
CREATE USER HUZR@localhost IDENTIFIED by '123';
CREATE USER pig@localhost IDENTIFIED by '123';

然后我们可以在Nvaicat for MySQL客户端用户界面看到我们所创建的用户:

接着可以对用户授权

1
2
3
4
5
6
7
GRANT SELECT
ON TABLE student
TO HUZR@localhost;

GRANT SELECT
ON TABLE course
TO pig@localhost;

则我们刚才得到的用户分别有了对student、course表查询的权限

那么我们如何登陆我们新建的用户呢?

在Nvaicat for MySQL客户端新建一个连接:

其中用户名和密码为我们刚才设定的内容。

由于Nvaicat for MySQL客户端密码编码版本与MySQL服务器不同的原因。我们还需要更新该用户在MySQL服务器下的密码及解锁该用户 详情见链接

此后我们用新增用户登陆,可以发现里面存在被我们赋予查询权限的表

回收权限

1
2
3
REVOKE SELECT
ON TABLE student
FROM HUZR@localhost;

经过此操作后在新建用户的数据库中已经没有相应的表格存在

至此第一部分的基础内容已经完成。


存储及触发器的使用

存储相当于对一个函数的封装,创建存储如下:

1
2
3
4
5
6
7
delimiter $  
CREATE PROCEDURE select_row ()
BEGIN
trueSELECT * FROM student WHERE sname = ' ';
trueSELECT * FROM course ;
END $
delimiter ;

对以上代码进行解析:

  • MySQL默认以”;”为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER $”声明当前段分隔符,让编译器把两个”$”之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。
  • CREATE PROCEDURE 后面接的是存储的name(可以理解为函数的名称,可带参数,此处不展开),例子中即为selcet_row()
  • BEGIN 到 EDN 中间为存储的sql语句,可以花样百出

存储调用

1
CALL select_row();

注意尽管没有参数,也需要带上括号

查看存储

1
show PROCEDURE STATUS WHERE Db = '031602215';

删除存储

1
DROP PROCEDURE select_row;

详尽资料链接见下:

https://www.cnblogs.com/mark-chan/p/5384139.html

https://www.cnblogs.com/geaozhang/p/6797357.html


触发器顾名思义,创建触发器如下:

1
2
3
4
5
6
7
8
9
delimiter $

CREATE TRIGGER inset_student
AFTER UPDATE ON xuandao FOR EACH ROW
BEGIN
trueINSERT INTO student VALUES('这里是触发器',NULL,NULL,NULL,NULL);
END $

delimiter ;

对以上面代码解析:

  • CREATE TRIGGER 后面接的的触发器名称
  • AFTER UPDATE 表明在更新操作后触发,其中AFTER的另一个参数为BEFORE; UPDATE亦可改成 INSERT,DELETE
  • ON 后面接表的名称,说明在哪张表建立触发器
  • FOR EACH ROW 说明是行级触发器,似乎没啥作用
  • BEGIN END 里面为触发执行的语句

注意,不能对同一张表同时触发又执行 ,否则会报错

查看触发器

1
SHOW TRIGGERS;

查看触发器效果

1
2
3
4
5
UPDATE xuandao
SET tc = ' '
WHERE sname = ' ';

SELECT * FROM student;

通过对xuandao表格的更新,然后通过select查看效果

删除触发器

1
DROP TRIGGER inset_student;

详尽资料链接见下:

https://www.cnblogs.com/CraryPrimitiveMan/p/4206942.html


数据库的备份与恢复

完整备份:

mysqldump -u root -p database_name > 路径及备份文件名.sql

差异备份:

在windows下我还不会。。。。

日志备份:

同上。。。

备份恢复:

source yourbf.sql


前面所讲的内容都只是一个框架,可以精致的展开。

在windows下的MySQL真是难受,找了两天的教程还是没解决,各种教程都是Linux情况的。

愿你是你所期待的样子

愿你还是你所期待的样子

Hide