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

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

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

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


用户及用户权限管理

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

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

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

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

数据库技术与应用mysql版实验答案_数据库技术与应用mysql版实验答案

接着可以对用户授权

GRANT SELECT
	ON TABLE student
	TO HUZR@localhost;

	GRANT SELECT
	ON TABLE course
	TO pig@localhost;

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

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

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

数据库技术与应用mysql版实验答案_触发器_02

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


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


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

数据库技术与应用mysql版实验答案_数据库_03

回收权限

REVOKE SELECT
	ON TABLE student
	FROM HUZR@localhost;

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

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


存储及触发器的使用

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

delimiter $  
	CREATE PROCEDURE select_row ()
	BEGIN
		SELECT * FROM student WHERE sname = '   ';
		SELECT * FROM course ;
	END $
	delimiter ;

对以上代码进行解析:

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

存储调用

CALL select_row();

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

查看存储

show PROCEDURE STATUS WHERE Db = '031602215';

删除存储

DROP PROCEDURE select_row;

详尽资料链接见下:




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

delimiter $

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

	delimiter ;

对以上面代码解析:

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

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

查看触发器

SHOW TRIGGERS;

查看触发器效果

UPDATE xuandao
	SET tc = '   '
	WHERE sname = '   ';
	
	SELECT * FROM student;

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

删除触发器

DROP TRIGGER inset_student;

详尽资料链接见下:



数据库的备份与恢复

完整备份:

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

差异备份:

在windows下我还不会。。。。

日志备份:

同上。。。

备份恢复:

source yourbf.sql


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

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