日期:2014-05-16 浏览次数:20851 次
DATABASE()
mysql> select DATABASE(); -> 'test'
如果没有当前的数据库,DATABASE()
返回空字符串。
USER()
SYSTEM_USER()
SESSION_USER()
mysql> select USER(); -> 'davida@localhost'
在MySQL 3.22.11或以后版本中,这包括用户名和客户主机名。你可以象这样只提取用户名部分(值是否包括主机名部分均可工作):
mysql> select substring_index(USER(),"@",1); -> 'davida'
PASSWORD(str)
str
计算一个口令字符串。该函数被用于为了在user
授权表的Password
列中存储口令而加密MySQL口令。
mysql> select PASSWORD('badpwd'); -> '7f84554057dd964b'
PASSWORD()
加密是非可逆的。PASSWORD()
不以与Unix口令加密的相同的方法执行口令加密。你不应该假定如果你的Unix 口令和你的MySQL口令是一样的,PASSWORD()
将导致与在Unix口令文件存储的相同的加密值。见ENCRYPT()
。
ENCRYPT(str[,salt])
crypt()
系统调用加密str
。salt
参数应该是一个有2个字符的字符串。(MySQL 3.22.16中,salt
可以长于2个字符。)
mysql> select ENCRYPT("hello"); -> 'VxuFAJXVARROc'
如果crypt()
在你的系统上不可用,ENCRYPT()
总是返回NULL
。ENCRYPT()
只保留str
起始8个字符而忽略所有其他,至少在某些系统上是这样。这将由底层的crypt()
系统调用的行为决定。
ENCODE(str,pass_str)
pass_str
作为口令加密str
。为了解密结果,使用DECODE()
。结果是一个二进制字符串,如果你想要在列中保存它,使用一个BLOB
列类型。
DECODE(crypt_str,pass_str)
pass_str
作为口令解密加密的字符串crypt_str
。crypt_str
应该是一个由ENCODE()
返回的字符串。
MD5(string)
mysql> select MD5("testing") -> 'ae2b1fca515949e5d54fb22b8ed95575'
这是一个“RSA数据安全公司的MD5消息摘要算法”。
LAST_INSERT_ID([expr])
AUTO_INCREMENT
列的最后一个自动产生的值。见20.4.29 mysql_insert_id()
。
mysql> select LAST_INSERT_ID(); -> 195
产生的最后ID以每个连接为基础在服务器被维护,它不会被其他客户改变。如果你更新另外一个有非魔术值(即,不是NULL
和不是0
的一个值)的AUTO_INCREMENT
列,它甚至不会被改变。如果expr
作为一个参数在一个UPDATE
子句的LAST_INSERT_ID()
里面给出,那么参数值作为一个LAST_INSERT_ID()
值被返回。这可以用来模仿顺序:首先创建表:
mysql> create table sequence (id int not null); mysql> insert into sequence values (0);
然后表能被用来产生顺序号,象这样:
mysql> update sequence set id=LAST_INSERT_ID(id+1);
你可以不调用LAST_INSERT_ID()
而产生顺序,但是这样使用函数的实用程序在服务器上自动维护ID值作为最后自动产生的值。你可以检索新的ID值,就像你能读入正常MySQL中的任何正常的AUTO_INCREMENT
值一样。例如,LAST_INSERT_ID()
(没有一个参数 )将返回新ID。C API函数mysql_insert_id()
也可被用来得到值。
FORMAT(X,D)
X
为类似于格式'#,###,###.##'
,四舍五入到D
为小数。如果D
为0
,结果将没有小数点和小数部分。
mysql> select FORMAT(12332.123456, 4); -> '12,332.1235' mysql> select FORMAT(12332.1,4); -> '12,332.1000' mysql> select FORMAT(12332.2,0); -> '12,332'
VERSION()
mysql> select VERSION(); -> '3.22.19b-log'
GET_LOCK(str,timeout)
str
给定的一个名字的锁定,第二个timeout
为超时。如果锁定成功获得,返回1
,如果尝试超时了,返回0
,或如果发生一个错误,返回NULL
(例如从存储器溢出或线程用mysqladmin kill
被杀死)。当你执行RELEASE_LOCK()
时、执行一个新的GET_LOCK()
或线程终止时,一个锁定被释放。该函数可以用来实现应用锁或模拟记录锁,它阻止其他客户用同样名字的锁定请求;赞成一个给定的锁定字符串名字的客户可以使用字符串执行子协作建议的锁定。
mysql> select GET_LOCK("lock1",10); -> 1 m