MySQL二级等级考试归纳——高级指令篇(下)

来源:互联网 发布:自学编程好找工作吗 编辑:程序博客网 时间:2024/05/16 00:27

接上篇,继续来高级指令。本篇包括的有:存储过程,存储函数,访问控制与安全管理,备份与恢复,对应书上10-12章。

因为打算把指令的部分归纳出来,文字太多的如概念之类的东西写到概念篇去了,有些太复杂的东西也没写在概念篇,可以看书或者查看其它资料。

时间比较赶,写到这一篇已经是写了大半天的了,精神力有点跟不上,所以可能没前几篇认真(也没见得有多认真),见谅……

http://blog.csdn.net/ycisacat/article/details/50933836 概念篇

http://blog.csdn.net/ycisacat/article/details/50935840基础指令篇 (增删改查)

http://blog.csdn.net/ycisacat/article/details/50963111 高级指令上篇(索引,视图,触发器,事件)


五,存储过程

创建存储过程(指令过于复杂有太多要说明的东西,比较难归纳,此处只写一个比较简单的例子,具体解释参考其他资料):

DELIMITER $$

CREATE PROCEDURE pro_person({IN | OUT | INOUT} var_name CHAR(20))

DETERMINISTIC

BEGIN

UPDATE tb_person SET name=var_name; 

END $$

查看存储过程:

SELECT 'pro_person' FROM mysql.proc WHERE db='db_name' (AND type='...')

SHOW PROCEDURE STATUS;

调用存储过程:

CALL pro_person('Sam');

删除存储过程:

DROP PROCEDURE FUNCTION IF EXISTS pro_person;


六,存储函数

创建存储函数(同存储过程,也是太复杂,此处只举一个书上的例子):

DELIMITER $$

CREATE FUNCTION fn_search(var_name CHAR(10))

RETURNS CHAR(2)

DETERMINISTIC

BEGIN

DECLARE ssex CHAR(2);

SELECT sex INTO ssex FROM tb_person WHERE name=var_name;

IF ssex IS NULL THEN

RETURN(SELECT '没有该学生');

ELSE IF ssex='女‘ THEN

RETURN(SELECT '女’);

ELSE RETURN(SELECT '男');

END IF;

END IF;

END $$

查看存储函数:

SHOW FUNCTIION STATUS;

调用存储函数:

SELECT fn_search('Bob');

删除存储函数:

DROP FUNCTION IF EXISTS fn_search;


七,访问控制与安全管理

查看所有账户:

SELECT * FROM mysql.user \G

查看账户权限:

SHOW GRANTS FOR 'root'@'localhost';

创建账户:

CREATE USER 'new_user'@'localhost' IDENTIFIED BY '123',

GRANT ALL PRIVILEGES ON *.* TO 'new_user'@'localhost' IDENTIFIED BY '123' WITH GRANT OPTION;(授予全部权限)

'new_user'是用户名,‘localhost'是账户所在主机名,localhost为本机,不指定时用’%'代替。‘new_user'@'localhost'和’new_user'@'%'不是同一个账户

WITH GRANT OPTION指权限可转移,即把自己所拥有的权限授予其他用户的权利

修改账号名:

RENAME USER 'new_user'@'localhost' TO 'somebody'@'localhost' ;

修改用户口令:

SET PASSORD FOR 'new_user'@'localhost' ='456';

授予权限:

GRANT SELECT(name)ON db_name.tb_person TO 'new_user'@'localhost' WITH GRANT OPTION;       //授予localhost上的new_user用户在db_name数据库的tb_person表中选择name字段的权限

可授予的权限见概念篇。不指定数据库、表时,用*.*代替(*为通配符)

限制权限:

授予权限中的WITH GRANT OPTION改为以下:

WITH MAX_QUERIES_PER_HOUR count      //限制每小时可以查询数据库的次数

WITH MAX_UPDATES_PER_HOUR count    //限制每小时可以修改数据库的次数

WITH MAX_CONNECTIONS_PER_HOUR count       //限制每小时可以连接数据库的次数

WITH MAX_USER_CONNECTIONS count       //限制同时连接MySQL的最大用户数

count 为数值,为0则不起作用

撤销权限:
REVOKE SELECT ON db_name.tb_person FROM 'new_user'@'localhost';
删除用户:
DELETE USER 'new_user'@'localhost';           //只写new_user默认删除的是‘new_user'@'%',不存在该用户时会报错

八,备份与恢复
导出数据:
SELECT * FROM db_name.tb_person INTO OUTFILE 'C:\file.txt'
FIELDS                                                          //FIELDS包含以下三个子句,三句至少出现一句
TERMINATED BY ','                                     //以,分隔字段
[OPTIONALLY] ENCLOSED BY ' " '           //字符值放在” "中,optionally表示所有值都放在“ ”中
ESCAPED BY '#'                                          //定义#为转义字符,取代’\',如空格会表示为 #n。
LINES TERMINATED BY '?'  //一个数据行以?结束

导入数据:

LOAD DATA [LOCAL] INFILE 'C:\file.txt' 

[REPLACE|IGNORE] INTO TABLE db_name.tb_person              //导入文件中有与数据库原有行相同的唯一关键字时,REPLACE替换原有行,ignore跳过

(name,birthday) //载入一个表的部分列,或文件中字段值顺序与原表中列的顺序不同

FIELDS 

TERMINATED BY ','

OPTIONALLY ENCLOSED BY ' " '

ESCAPED BY '#"

LINES

STARTING BY '$'                                //一个数据行以$开始

TERMINATED BY '?'

IGNORE 3 LINES                             //忽略前三行

SET score='80'                             //导入数据时修改表中列的值


用mysqldump备份:

mysqldump -h localhost -u root -p123 db_name tb_person >C:\file.txt       //-p和密码间不可以有空格,备份一个表

mysqldump -h localhost -u root -p123 --databases db_name >C:\file.txt       //备份一个数据库

mysqldump -h localhost -u root -p123 --all-databases >C:\file.txt       //备份所有数据库

mysqldump -h localhost -u root -p123 --tab =C:\file.txt       //把表结构和表数据分开备份


用mysqlimport备份:

mysqlimport -u root -p123 --low-priority --replace db_name C:\file.txt

 

用mysqlbinlog备份:

mysqlbinlog bin_log.000001 | mysql -u root -p123

清除日志文件:

RESET MASTER;                      //全部删除

PURGE {MASTER | BINARY} LOGS TO 'log_name';        //purge 为部分删除

PRUGE {MASTER | BINARY} LOGS BEFORE 'date’;


最后还有一篇是PHP的~



0 0