《MySQL必知必会》读书笔记_4_MySQL
PS:一个实际的存储过程案例
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_delete_article_by_id`(IN `id` int)BEGIN#Routine body goes here...DECLARE temp INT;SET @aid = id;SELECT COUNT(*) FROM gk_reply_article WHERE a_id = @aid INTO temp;IF(temp 0) THENDELETE FROM gk_reply_article WHERE a_id = @aid;END IF;SELECT COUNT(*) FROM gk_like_article WHERE a_id = @aid INTO temp;IF(temp 0) THENDELETE FROM gk_like_article WHERE a_id = @aid;END IF;SELECT COUNT(*) FROM gk_article WHERE id = @aid INTO temp;if(temp 0) THENDELETE FROM gk_article WHERE id = @aid;END IF;END
游标是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其其中的数据。
CREATE PROCEDURE processorders()BEGINDECLARE o INT;DECLARE ordernumbers CURSOR #定义和命名游标FORSELECT order_num FROM orders;OPEN ordernumbers; #打开游标FETCH ordernumbers INTO o;CLOSE ordernumbers; #关闭游标END
隐含关闭:如果你不明确关闭游标,MySQL将会在达到END语句时自动关闭它。
触发器唯一的命名
触发器关联的表
触发器一响应的活动:UPDATE、INSERT或UPDATE
触发器何时执行
只有表才支持触发器,视图不支持
事务处理,可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
MySQL是用一系列的默认设置预先配置的,这些设置通常在开始的时候很好用。但是一段时间后你可能需要调整内存、缓冲区大小等。(为查看当前设置,可使用SHOW VARIABLES;和SHOW STATUS;)
如果遇到显著的性能不良,可使用SHOW PROCESSLIST显示所有活动进程,还可以用KILL命令终结某个特定的进程。
mysqldump数据备份:
1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.3.导出一个数据库结构mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
假设我们的任务是要备份一个位于192.168.1.2服务器上,名称为backup_test的数据库,并把备份文件放到D:/bak/的文件夹中。又假设我们的操作系统为windows xp,于是我们可以用以下的方法执行备份操作:我们可以使用windows自带的命令提示符(调用命令提示符的方法有多种,最常用的就是点击开始菜单,选择“运行”,输入cmd的命令就可以启动了),在命令提示符中输入以下命令:
mysqldump -u backup -p 123456 -h 192.168.1.2 backup_test > D:/bak/bakcup.sql在这段命令中:mysqldump 是myqldump的程序名了;-u 是数据库的用户名,后面紧跟着用户名backup;-p 是数据库的密码,后面同样紧跟着密码,注意是-p和密码之间不能有空格;-h 是数据库的地址,如果没有此项表明是备份本地的数据库;backup_test 要备份的数据库名称;
> 表明该数据库备份到后面的文件,紧跟当然是备份文件的地址了,注意要用绝对文件路径,文件的后缀也可以用.txt。一旦执行该命令后,mysqldump立即执行备份操作。远程备份数据库要似乎网络的情况,一般远程备份需要一定的时间的。
或者使用mysqlhotcopy。
BACKUO TABLE 或 SELECT INTO OUTFILE转储所有数据到某个外部文件。
为保证所有数据都被写到磁盘,可能需要在进行备份前使用FLUSH TABLES语句。
#维护数据库,显示数据库表状态
ANALYZE TABLE gk_article
#发现和修复表问题
CHECK TABLE gk_article
#显示所有可用的字符集以及每个字符集的描述和默认校对。
SHOW CHARACTER SET
#显示所有可用校对
SHOW COLLATION
默认端口:3306
终结