• DEFAULT(col_name)

返回一个表列的默认值。若该列没有默认值则会产生错误。

mysql> UPDATE t SET i = DEFAULT(i)+1 WHERE id < 100;

  • 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'

  • GET_LOCK(str,timeout)

设法使用字符串str 给定的名字得到一个锁, 超时为timeout 秒。若成功得到锁,则返回 1,若操作超时则返回0  (例如,由于另一个客户端已提前封锁了这个名字 ),若发生错误则返回NULL (诸如缺乏记忆或线程mysqladmin kill 被断开 )。假如你有一个用GET_LOCK()得到的锁,当你执行RELEASE_LOCK()或你的连接断开(正常或非正常)时,这个锁就会解除。

这个函数可用于执行应用程序锁或模拟记录锁定。名称被锁定在服务器范围内。假如一个名字已经被一个客户端封锁, GET_LOCK() 会封锁来自另一个客户端申请封锁同一个名字的任何请求。这使对一个封锁名达成协议的客户端使用这个名字合作执行建议锁。然而要知道它也允许不在一组合作客户端中的一个客户端封锁名字,不论是服役的还是非故意的,这样阻止任何合作中的客户端封锁这个名字。一个减少这种情况发生的办法就是使用数据库特定的或应用程序特定的封锁名。例如,  使用db_name.str app_name.str 形式的封锁名。

mysql> SELECT GET_LOCK('lock1',10);

        -> 1

mysql> SELECT IS_FREE_LOCK('lock2');

        -> 1

mysql> SELECT GET_LOCK('lock2',10);

        -> 1

mysql> SELECT RELEASE_LOCK('lock2');

        -> 1

mysql> SELECT RELEASE_LOCK('lock1');

        -> NULL

注意,第二个 RELEASE_LOCK()调用返回 NULL ,原因是锁'lock1' 杯第二个GET_LOCK()调用解开。

  • INET_ATON(expr)

给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。地址可以是48比特地址。

mysql> SELECT INET_ATON('209.207.224.40');

        -> 3520061480

产生的数字总是按照网络字节顺序。如上面的例子,数字按照 209×2563 + 207×2562 + 224×256 + 40 进行计算。

INET_ATON() 也能理解短格式 IP 地址:

mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');

        -> 2130706433, 2130706433

注释 在存储由INET_ATON() 产生的值时,推荐你使用 INT UNSIGNED 列。假如你使用 (带符号) INT, 则相应的第一个八位组大于127IP 地址值会被截至  2147483647 (, INET_ATON('127.255.255.255') 所返回的值)。请参见11.2节,“数值类型”

  • INET_NTOA(expr)

给定一个数字网络地址 (4 8 比特),返回作为字符串的该地址的电地址表示。

mysql> SELECT INET_NTOA(3520061480);

        -> '209.207.224.40'

  • IS_FREE_LOCK(str)

检查名为str的锁是否可以使用 (换言之,没有被封锁)。若锁可以使用,则返回  1  (没有人在用这个锁), 若这个锁正在被使用,则返回0 ,出现错误则返回 NULL  (诸如不正确的参数 )

  • IS_USED_LOCK(str)

检查名为str的锁是否正在被使用(换言之,被封锁)。若被封锁,则返回使用该锁的客户端的连接标识符。否则返回 NULL

  • MASTER_POS_WAIT(log_name,log_pos[,timeout])

该函数对于控制主从同步很有用处。它会持续封锁,直到从设备阅读和应用主机记录中所有补充资料到指定的位置。返回值是其为到达指定位置而必须等待的记录事件的数目。若从设备SQL线程没有被启动、从设备主机信息尚未初始化、参数不正确或出现任何错误,则该函数返回 NULL。若超时时间被超过,则返回-1MASTER_POS_WAIT() 等待期间,从设备SQL线程中止,则该函数返回 NULL。若从设备由指定位置通过,则函数会立即返回结果。

假如已经指定了一个超时时间值,当 超时时间 秒数经过后MASTER_POS_WAIT()会停止等待。超时时间 必须大于 0;一个为零或为负值的 超时时间 表示没有超市时间。 

  • NAME_CONST(name,value)

返回给定值。 当用来产生一个结果集合列时, NAME_CONST()促使该列使用给定名称。 

mysql> SELECT NAME_CONST('myname', 14);

+--------+

| myname |

+--------+

|     14 |

+--------+

这个函数被添加进 MySQL 5.0.12。它只做内部使用。 服务器在书写来自包含局部程序变量的存储程序的语句时会用到它,详见20.4节,“存储子程序和触发程序的二进制日志功能”。你可能会在mysqlbinlog 的书橱中看到这个函数。

  • RELEASE_LOCK(str)

解开被GET_LOCK()获取的,用字符串str 所命名的锁。若锁被解开,则返回  1,若改线程尚未创建锁,则返回0 (此时锁没有被解开 ), 若命名的锁不存在,则返回 NULL。若该锁从未被对GET_LOCK()的调用获取,或锁已经被提前解开,则该锁不存在。

DO 语句和RELEASE_LOCK()同时使用很方便。请参见13.2.2节,“DO语法”

  • SLEEP(duration)

睡眠(暂停) 时间为duration 参数给定的秒数,然后返回 0。若 SLEEP() 被中断,它会返回 1 duration 或许或包括一个给定的以微秒为单位的分数部分。

  • UUID()

返回一个通用唯一标识符(UUID) ,其产生的根据是《DCE 1.1: 远程过程调用 (附录A) CAE (公共应用软件环境) 的说明,该作品于199710月由 The Open Group 出版 (文件编号 C706, http://www.opengroup.org/public/pubs/catalog/c706.htm).

UUID被设计成一个在时间和空间上都独一无二的数字。2个对UUID() 的调用应产生2个不同的值,即使这些调用的执行是在两个互不相连的单独电脑上进行。

UUID 是一个由5位十六进制数的字符串表示的128比特数字 ,其格式为  aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee

    • 3个数字从一个时间戳产生。 
    • 4 个数字保持暂时唯一性,以防时间戳值失去单一性 (例如, 由于经济时)
    • 5个数字是一个 IEEE 802 节点号,它提供空间唯一性。若后者不可用,则用一个随机数字替换。 (例如, 由于主机没有以太网卡,或我们不知道怎样在你的操作系统上找到界面的机器地址 )。假若这样,空间唯一性就不能得到保证。尽管如此,一个冲突的发生机率还是非常低的。

目前,一个界面的 MAC 地址尽被FreeBSD Linux考虑到。在其它操作系统中, MySQL使用随机产生的 48比特数字。

mysql> SELECT UUID();

        -> '6ccd780c-baba-1026-9564-0040f4311e29'

注意, UUID() 不支持复制功能。

  • VALUES(col_name)

在一个INSERT ON DUPLICATE KEY UPDATE …语句中,你可以在UPDATE 子句中使用 VALUES(col_name)函数,用来访问来自该语句的INSERT 部分的列值。换言之,UPDATE 子句中的 VALUES(col_name) 访问需要被插入的col_name 的值,并不会发生重复键冲突。这个函数在多行插入中特别有用。  VALUES()函数只在INSERT ... UPDATE 语句中有意义,而在其它情况下只会返回 NULL。请参见13.2.4节,“INSERT语法”.

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)

    -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);