首页 > MySQL > MySQL 那些你不知道的 系统信息函数
2009五月29

MySQL 那些你不知道的 系统信息函数

谁是最了解你的人?呵,基本上我感觉是你自己。

如果你自己都不了解你自己,那么其实没有人真正的懂你,因为你这个人不真实。呵呵。

只是些个人看法,嗯。那么,在程序中也是一样,最了解自己的永远是自己本身。

所以,MySql知道自己的一切信息,比如说:现在的数据库名,自己的版本号,当前登录的用户是谁?这些统统的知道。

那么,我们就来看一下MySql 是怎么获取这些重要的系统信息的吧——系统信息函数。

DATABASE(),USER()和VERSION()分别返回当前所选数据库、当前用户及MySQL版本的信息:

SELECT DATABASE( ) , USER( ) , VERSION( );
/*
DATABASE()  USER()  VERSION()
test    root@localhost  5.1.30-community
*/

现在在WINDOWS下面用的是PHPMYSQLADMIN,对付看吧。呵呵。。

LAST_INSERT_ID()函数返回向AUTOINCREMENT字段中插入数据时由MySQL自动产生的最后一个ID:

CREATE TABLE test
(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(15) NOT NULL
)
AUTO_INCREMENT = 100

先把表建好了。然后插入数据。呵呵。

insert into test(username) values('xiaoxiaozi');
insert into test(username) values('gmail');
SELECT LAST_INSERT_ID( );
/*
last_insert_id()
101
*/

BENCHMARK()函数通过服务器判定表达式指定的次数来使开发者评价MySQL的性能:

/*
显示行 0 - 0 (1 总计, 查询花费 0.2211 秒)
*/

SELECT BENCHMARK( 999999, LOG( RAND( ) * PI( ) ) );
/*
benchmark(999999,LOG(RAND()*PI()))
0
*/

在一定的时间或者不同的时间执行这个函数。开发者可以获得用来衡量服务器性能的原始数据。

GET_LOCK(),RELEASE_LOCK(),IS_FREE_LOCK()都是特意为实现客户之间的应用层锁定设计的函数:

GET_LOCK()函数有两个参数,锁定的名字和持续的时间(秒),

然后尝试创建具有那个名字的锁定,并指定。成功返回1,不成功返回0或NULL。

SELECT GET_LOCK(  '20090529', 60 );
/*
get_lock('20090529',60)
1
*/

RELEASE_LOCK()函数进行逆转,释放给定名字的锁定,如果成功返回1,失败返回0错误返回NULL。

SELECT RELEASE_LOCK(  '20090529' );
/*
release_lock('20090529')
1
*/

IS_FREE_LOCK()函数检查给定名字的锁定是否存在,而且根据这个锁定是自由的或者是正在使用的情况返回1或者0。

SELECT IS_FREE_LOCK(  '20090529' );
/*
is_free_lock('20090529')
1
*/

任何时间都不能有多于1个的锁定处于活动状态,多次调用GET_LOCK()函数将释放前面产生的锁定。

select get_lock('xiaoxiaozi',60);
select is_free_lock('xiaoxiaozi');
/*
is_free_lock('xiaoxiaozi')
0
*/

select get_lock('simaopig',60);
select is_free_lock('xiaoxiaozi');
/*
is_free_lock('xiaoxiaozi')
1
*/

至于我为啥要两个select语句一起写。嗯。你们想想吧。呵呵。

GET_LOCK(),RELEASE_LOCK()和IS_FREE_LOCK()函数使多个MySQL客户的同步活动变得非常容易,

使用普通锁定的客户可以使用这些函数避免和其他用户混淆。

呵呵,还记得我刚来公司的时候,直接在线上数据库select * 直接把线上服务给锁了。呵呵。。结果外网访问不了了。嗯。很强大吧。

FOUND_ROWS()返回最后一个select查询进行检索的总行数:

将这个函数与SQL_CALC_FOUND_ROWS和LIMIT结构组合尤其有用,它可以“浏览”查询集(结合LIMIT)的结果,

同时显示检索(使用SQL_CALC_FOUND_ROWS和FOUND_ROWS())的记录的总数。

例如:

SELECT SQL_CALC_FOUND_ROWS * FROM wp_posts LIMIT 0 , 4;

SELECT FOUND_ROWS( );
/*
found_rows()
9
*/

看第一次查询看我库里面的文章列表数,我只取出前4条记录的有限子集,不过只要我在其中使用SQL_CALC_FOUND_ROWS

MySQL就会记录结果集总行数,并允许通过调用FOUND_ROWS()来检索这个数。

因此第二个查询可以不通过重新检查表就从服务器返回一个统计数字。

MASTER_POS_WAIT()函数主要是用在MySQL主从关系的从服务器端的一个专门函数:

呃,这个函数我没有用过,数据库主从问题我也不知道。因为我还是搞前端开发多些。

系统架构设计暂时没有那个能力。呵呵。。

但是还是来抄一下吧:

MASTER_POS_WAIT()函数有三个参数——日志名字、日志位置和超时值,

并且锁定主服务器更新自己到日志中指定的位置。这个函数经常用于复制环境。

呼,MySQL函数这块其实我真不想做笔记的,太多了。郁闷啊。

不过总算,初步的这些就算是完事了,总算是看到点曙光吧,嗯。

再写就该写使用数据库和表了。真的兴奋啊。。

这本书也看到了第8章,虽然不多,但是总比把它放在那让它上面好厚一层灰要好的多不是吗? :!:

GOOD GOOD STUDY,DAY DAY UP~~ :?:

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/05/29/684/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

5 Responses to “MySQL 那些你不知道的 系统信息函数”

  1. #1 bolo 回复 | 引用 Post:2009-05-29 20:07

    pr一更新了就这么勤,四连发啊!

    [回复]

  2. #2 leecay 回复 | 引用 Post:2009-05-29 20:14

    四连发… – -~!

    [回复]

  3. #3 simaopig 回复 | 引用 Post:2009-05-29 20:33

    @bolo
    晕,没有啊。只是这两天一直没学习,自己都不好意思了。呵呵。

    @leecay
    呵,要是有51的话,我就把子弹全弄出去。呵呵。

    [回复]

  4. #4 卢松松 回复 | 引用 Post:2009-05-30 00:30

    博主开始学习mysql了。加油啊!

    [回复]

  5. #5 simaopig 回复 | 引用 Post:2009-05-30 08:24

    @卢松松
    都学了好久了。呵呵,之前也写过很多关于MySQL的文章了。嗯。加油!

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)