数据库实践作业二资料整合
根据实验课的题目要求,共需要掌握以下部分:
- 用户及用户权限管理
- 存储及触发器使用
- 数据库的备份与恢复
以下部分将是很基础的数据库操作,存在许多不足需要改正。
用户及用户权限管理
前提:熟悉课本第四章内容
我们在ROOT用户下创建普通用户:
CREATE USER HUZR@localhost IDENTIFIED by '123';
CREATE USER pig@localhost IDENTIFIED by '123';
然后我们可以在Nvaicat for MySQL客户端用户界面看到我们所创建的用户:
接着可以对用户授权
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服务器下的密码及解锁该用户 详情见链接
此后我们用新增用户登陆,可以发现里面存在被我们赋予查询权限的表
回收权限
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情况的。