接上篇,继续来高级指令。本篇包括的有:存储过程,存储函数,访问控制与安全管理,备份与恢复,对应书上10-12章。
因为打算把指令的部分归纳出来,文字太多的如概念之类的东西写到概念篇去了,有些太复杂的东西也没写在概念篇,可以看书或者查看其它资料。
时间比较赶,写到这一篇已经是写了大半天的了,精神力有点跟不上,所以可能没前几篇认真(也没见得有多认真),见谅……
http://www.voidcn.com/article/p-torblxpi-yb.html 高级指令上篇(索引,视图,触发器,事件)
五,存储过程
创建存储过程(指令过于复杂有太多要说明的东西,比较难归纳,此处只写一个比较简单的例子,具体解释参考其他资料):
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的~