查看mysql数据库中某个库的存储过程
如果只想知道存储过程的名字,有两种方法
- 方法一:
select `name` from mysql.proc where db = '数据库名' and `type` = 'PROCEDURE';
- 方法二:
use 数据库名 show procedure status;
查看存储过程的代码
use 数据库名 show create procedure proc_name;
如果只想知道存储过程的名字,有两种方法
select `name` from mysql.proc where db = '数据库名' and `type` = 'PROCEDURE';
use 数据库名 show procedure status;
查看存储过程的代码
use 数据库名 show create procedure proc_name;
今天碰到一个奇怪的问题,在一个外部的js文件中给页面绑定了onload事件,在FF下能正确执行,IE6下却没有执行。最开始以为是绑定事件写的有问题,后来排除,经过多方调试,依然没有找到问题所在。最后还是香烟给我灵感,突然想到会不会是页面是不是已经页面load完了才执行绑定onload的事件?赶紧用测试一把,把window的onload换成document.body的click,点击页面后成功执行了。基本可以肯定是页面load完了才进行绑定操作的。由于是在页面加载的js中用动态加载的方式加载了另外一个js,在另外一个js中执行的绑定事件,也就是说这样操作在ie6下可能会造成问题。现在知道问题所在,那解决问题办法就是先用document.readyState(complete表示加载完成)查看页面是否已经load完成,如果已经完成就可以直接执行,否则就绑定onload事件。
兼容主流的浏览量的绑定事件通用方法,
function addEvent(obj, event, callback) { if (obj.addEventListener) { obj.addEventListener(event, callback, false); } else { obj.attachEvent("on" + event, callback); } }
当然也可以用document.readyState来达到onload的效果,示例如下:
(function(){ if (document.readyState && document.readyState == 'complete') { // doing } else { setTimeout(arguments.callee, 10); } })();
利用nginx的rewrite的指令,可以实现url的转向,对于rewrtie有四种不同的flag,分别是redirect、permanent、break和last。其中前两种是跳转型的flag,后两种是代理型。跳转型是指有客户端浏览器重新对新地址进行请求,代理型是在WEB服务器内部实现跳转的。
使用root或proxy_pass指定源,last,break都可以,但是结果可能会有差别,后面用例子说明;使用alias指定源,必须使用last。假如有如下配置:
location / { root /var/www/html; index index.html index.htm; rewrite "/x/t.html" /y/t.html break; } location /y/ { root /var/www/html/other; }
当请求/x/t.html,符合rewrite规则,所以进行调整,调整的地址为/y/t.html,由于使用的flag是break,所以在“location /”中进行跳转,结果是/var/www/html/y/t.html。但如果flag为last,那么/y/t.html将在server标签中重新执行,由于存在一个“location /y/”,所以跳转被重新指定到“location /y/”标签,所以这个时候的结果为/var/www/html/other/y/t.html。
注意:使用last,如果配置不当,可能引起死循环。例如:
location /x/ { proxy_pass http://my_proxy; rewrite "^/x/(.*)\.html$" /x/1.html last; }
最近在使用jquery时候,通过firefox的错误控制看到$(function(){//mycode}) is not a function的错误提示,但是mycode代码块都成功执行了,页面的没有出现别的异常,不过看到这个错误提示还是不爽,如是觉得找到原因,网上一搜,发现有这个问题的还不少,最多的是由于jquery和别的框架冲突,例如prototype,还有的说是由于两次导入了jquery,我在我的项目中仔细的查看,不存在刚提到的两种情况,一度以为是由于文件的编码问题造成,试着用不同的文本工具来定义js文件,问题还是依旧,经过不断的各种方法尝试,终于知道问题出在什么地方,是因为在后面加了一对括号引起的。
$(function(){ //my code // ... })();
注意最后的一对括号。可能是因为最近使用闭包情况比较多,写的时候随手写上了,害我一顿好找。
mysql的sql语句中可以使用between来限定一个数据的范围,例如:
select * from user where userId between 5 and 7;
查询userId为5、6,7的user,userId范围是包含边界值的,也等同如下查询:
select * from user where userId >= 5 and userId <= 7;
很多地方都提到between是给定的范围是大于等第一值,小于第二个值,其实这是不对的。此前我一直也是这么认为,通过实验,结论是包含两边的边界值,如果实在拿不准,可以采用>= 、<=的方式来指定条件。
另外 not between的范围是不包含边界值。
mysql服务可以把超过指定规定时间的sql语句已日志的方式记录下来,检查当前mysql服务有没有记录慢查询的命令为:
/usr/local/mysql/bin/mysqladmin var | grep log_slow | tr -d "|"
如果看到log_slow_queries OFF则没有启用,启用的方法很简单,把如下配置放在mysql的配置文件my.cnf中的mysqld段里即可。
log-slow-queries = /var/lib/mysql/slow-queries.log long_query_time = 1 log-queries-not-using-indexes log-slow-admin-statements
上面的配置打开了slow query日志,将会捕获了执行时间超过了1秒的查询,包括执行速度较慢的管理命令(比如OPTIMEZE TABLE),并且记录了没有使用索引的查询。这些SQL,都会被记录到log-slow-queries指定的文件/var/lib/mysql /slow-queries.log文件中。
log-slow-queries
存放slow query日志的文件。你必须保证mysql server进程mysqld_safe进程用户对该文件有w权限。
long_query_time
如果query time超过了该值,则认为是较慢查询,并被记录下来。单位是秒。
log-queries-not-using-indexes
MySQL会将没有使用索引的查询记录到slow query日志中。无论它执行有多快,查询语句没有使用索引,都会被记录。有的时候,有些没有使用引索的查询非常快(例如扫描很小的表),但也有可能导致服务器变慢,甚至还会使用大量的磁盘空间。
log-slow-admin-statements
一些管理指令,也会被记录。比如OPTIMEZE TABLE, ALTER TABLE等等。
需要说明的是long_query_time很多地方都说最小是1秒,其实该值可以是一个浮点数,起码在mysql 5版本中可以这么配置,例如 0.1,也就是100毫秒。
rsync带上delete的参数后,当源目录中的文件删除,同步后目标目录中的文件也会被删除,如果源目录写法不当,可能无法达到同步删除目标目录的文件。例如:
/usr/bin/rsync -vzrtopg --progress --delete \ /home/yangyz/tmp/src/* /home/yangyz/tmp/dest/
当删除src下的文件或文件夹时,同步后dest中还是存在,如果是删除src的子目录下的,同步后dest中会被删除,而下面命令就不一样,不管删除的是哪个文件夹下的内容,同步dest都会做相同的删除
/usr/bin/rsync -vzrtopg --progress --delete \ /home/yangyz/tmp/src/ /home/yangyz/tmp/dest/
上述两条命令的不同之处就是在src后面是否带*号,另外如果src目录后不带斜杠,那么是将src目录复制到dest中,包含了src目录,否则是把src目录下的文件同步到dest中,不包含src目录。
当采用相对位置来定义div,如果该区域也存在flash对象,即使div的z-index的设的很大,默认情况下,flash对象会覆盖住div的,解决办法是通过设置加载flash的object的wmode参数,例如
<param name= "wmode" value= "transparent"> 或 <param name= "wmode" value= "opaque">
上述第一个是flash背景透明,第二个则是背景不透明。
另外如果使用swfobject.js来加载swf,则可以使用如下方法:
swfobject.embedSWF( "happy_year.swf", "div_container", "350", "350", "9.0.0", "install_flash_player.swf", null, opObjectParams );
即在最后一个参数上添加wmode的值。
time()函数能获取一个相对于1901年的时间秒数,但是需要注意,如果系统没有设置时区,那么获得的结果是UTC时间,相对中国用户来说,就是相差了8个小时,例如通过date来获取当前的日期,date(‘Y-m-d’),在早上8点前看到的日期是昨天的,所以需要显示设置时区,可以在php.ini中设置,date.timezone = PRC,或者在使用前用date_default_timezone_set来设置,例如 date_default_timezone_set(“PRC”);
date命令可以获取当前的时间,通过man,可以看到date有很多参数可以用,很容易做到格式化,例如:
date +"%F" 输出格式:2011-12-31 date +"%F %H:%M:%S" 输出格式:2011-12-31 16:29:50
这都是打印出系统的当前时间,如果要获取相对当前时间的某个时间,需要怎么做,通过 -d 参数就能实现。例如:
date -d"tomorrow" +"%F %H:%M:%S" 输出明天这个时候的时间 date -d"yesterday" +"%F %H:%M:%S" 输出昨天这个时候的时间
如果说我想获取13天前的时间怎么办,-d参数还有更加灵活的用法,例如:
date -d"-1 day ago" +"%F %H:%M:%S" 输出明天这个时候的时间 date -d"1 day ago" +"%F %H:%M:%S" 输出昨天这个时候的时间 date -d"1 week ago" +"%F %H:%M:%S" 输出7天前这个时候的时间,等价于 date -d"7 day ago" +"%F %H:%M:%S"
可以看到ago的强大了吧,第一个数字可以是负数,负数表示将来时间,正数表示前面已经过去的时间,第二个参数minute、hour、day、month、week。