设为首页 加入收藏

TOP

MySQL性能优化(二)(二)
2015-07-24 11:08:14 来源: 作者: 【 】 浏览:7
Tags:MySQL 性能 优化
MySQL直接传个值就可以(MySQL是将预处理的SQL储存起来,用的时候传值直接就执行,就不需要每次请求连接MySQL在重新执行) 6:MySQL事务处理(增删改查后只要没有commit,全可以回滚) *myisam引擎不支持事务,innodb(支持外键和事务)才支持事务 修改表引擎方法:alter table t1 engine=innodb 一:事务操作 查看是否自动提交:select @@autocommit; 关闭自动提交 set autocommit=0; delete from t1 where id>5; 数据只是临时删除,如果commit就真正的执行删除语句 rollback; 只要没commit还原刚才删除的数据 commit; 二:还原点的使用: insert into t1 values("user4"); savepoint p1; insert into t1 values("user5"); savepoint p2; insert into t1 values("user6"); savepoint p3; --3个数据已经插进去啦,能后你觉得user6不要,你就找到还原点 savepoint p2就行 rollback to p2; --还原到P2 user6不要 commit; 7:MySQL存储(可以认为是自定义的函数) 创建一个存储: \d // create procedure p1() begin set @i=0; while @i<10 do insert into t2(name) values(concat("user",@i)); --这里可以做增删改查。。。都行 set @i=@i+1; end while; end; // 执行一个存储: \d ; call p1(); 查看存储: show procedure status; show create procedure p1\G --查看p1存储的基本信息 8:MySQL触发器(自动执行) *查询没有必要做触发器!:select * from t1 union select * from t2; 一:增加触发器 \d // 创建一个名字为tg1的触发器,当向表中插入数据时,就向t2表中插入一条数据 create trigger tg1 before insert on t1 for each row begin insert into t2(id) values(new.id); --new.id 比如向t1表里面插入了id=4的 能后new.id=4 直接复制到这 end// 准备好t1 表 和 t1表 向t1表中插入多条数据 查看:show triggers; 删除触发器:drop trigger t2; 二:删除触发器(注意下:删除的时候2个表的值一定要对称,比如t1:1,2,3 t2:11,12,13这么删除是不行会报错,以一定要对称 比如t1和t2表都有user1,这样删除就是没问题 ) \d // create trigger tg2 before delete on t1 for each row begin delete from t2 where id=old.id; --插入的时候里面没有这个值叫new.id 提前有的值叫old.id end// 三:更改触发器: create trigger tg3 before update on t1 for each row begin update t2 set id=new.id where old.id; --(update t1 set name="leyangjun"-new.id where name="zhangfei"-old.id) end// 9:重排auto_increment值 MySQL数据库自动增长的ID如何恢复: 清空表的时候,不能用delete from tableName; 而是用truncate tableName; 这样auto_increment就恢复成1了 或者清空内容后直接用alter命令修改表:alter table tableName auto_increment=1; 场景: 1:t1表里面有id字段分别对应 1,2,3,4,5,6,7,8,9的记录, 2:能后我们delete删除,能后在插入数据,你会发现插入的时候是从10,11,12,13.....开始而不是1 3:清空的时候我们执行下这个归档为1即可: alter table tableName auto_increment=1; 4:能后在插入的时候就是从1开始的啦 ==================================================================================================================================== 2.常用的SQL技巧 一:正则表达式的使用 --(注意匹配到了是1 没有则为0) select "linux is very ok" regexp ".*" ; --匹配所有 select "linux is very ok" regexp "^linux" --匹配以linux为开头的 ->通用的一些: ^ 在字符串的开始处进行匹配 a? 匹配1个或0个 $ 在字符串的末尾处进行匹配 a1|a2 匹配a1或a2 . 匹配任意单个字符,包括换行符号 a(m) 匹配m个a [...] 匹配括号内的任意字符 a(m,) 匹配至少m个a [^...]匹配不出现括号内的任意字符 a(m,n) 匹配m到n个a a* 匹配0个或多个a(包括空串) a(,n) 匹配0到n个a a+ 匹配1个或多个(不包括空串) (...) 将模式元素组成单一元素 匹配邮箱(根据匹配.,正则效率高): --但是正则比like的缺点就是更消耗程序消耗资源 1使用正则表达式“$” 和 [...] 进行匹配: select name,email from leyangjun where email REGEXP "@163[.,]com$"; --[.,]匹配. 或 , 2使用like方式查询: select name,email from leyangjun where email like "@163.com" or email like "%@163,com"; 二:巧用rand()提取随机行(select rand()*100) MySQL数据库中随机函数rand()是取一个0-1之间的数,利用这个函数一起order by能够把数据随机排序 select * from stu order by rand(); --随机排序 select * from stu order by rand() limit 3; --抽样调差可以玩 三:利用group by 的 with rollup 子句统计 *注意:with rollup不可以和order by同时使用 使用group by的with rollup 子句可以检索出更多的分组聚合信息 select cname,pname,count(pname) from demo group by cname,pname; 使用with rollup可以统计出更多的信息: select name,pname,count(pname) from demo group by cname,pname with rollup; --会吧算出来的数加起来 比如:bj hd 5 sh hd 4 最后会增加个null 列 总数9 四:用bit group functions做统计(用的少),就是二进制进行运算 *只有聚合分组的时候这个2个函数才会有意义。 在使用group by 语句时可以同时使用bit_and 、bit_or函数来完成统计工作。这两个函数的 作用主要是做数值之间的逻辑运算。 2个函数把数值转成二进制 bit_or或运算->二进制的值-就是0和1(0,1=1 0,0=0 1,1=1): select id,bit_or(kind) from order_rab group by id; bit_and是&&运算(只有1,1=1,其他值全为0): select id,bit_and(kind) from order_rab group by id; 五:使用外键需要注意的问题(不鼓励在MySQL中使用外键) 外键:我这个表的字段是楞一个表的主键,依赖关系 create table temp(id int,name char(20),foreign key(id) references outTable(id) on delete cascade on update casca
首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇JDBC对MySQL数据库存储过程的调用 下一篇mysql基本总结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 Python 进行数据 (2025-12-25 15:49:09)
·如何学习Python数据 (2025-12-25 15:49:07)
·利用Python进行数据 (2025-12-25 15:49:04)
·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)