- 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)
給出一個作為字符串的網絡地址的點地址表示,返回一個代表該地址數值的整數。地址可以是4或8比特地址。
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列, 則相應的第一個八位組大于127的IP 地址值會被截至 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。若超時時間被超過,則返回-1。若在MASTER_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 (公共應用軟件環境) 的說明,該作品于1997年10月由 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);