表 14.20 資訊函數
名稱 | 描述 |
---|---|
BENCHMARK() |
重複執行表達式 |
CHARSET() |
傳回引數的字元集 |
COERCIBILITY() |
傳回字串引數的校對強制性值 |
COLLATION() |
傳回字串引數的校對 |
CONNECTION_ID() |
傳回連線的連線 ID (執行緒 ID) |
CURRENT_ROLE() |
傳回目前作用中的角色 |
CURRENT_USER() 、CURRENT_USER |
已驗證的使用者名稱和主機名稱 |
DATABASE() |
傳回預設 (目前) 資料庫名稱 |
FOUND_ROWS() |
針對具有 LIMIT 子句的 SELECT,傳回若沒有 LIMIT 子句將傳回的列數 |
ICU_VERSION() |
ICU 程式庫版本 |
LAST_INSERT_ID() |
上次 INSERT 的 AUTOINCREMENT 資料行值 |
ROLES_GRAPHML() |
傳回代表記憶體角色子圖的 GraphML 文件 |
ROW_COUNT() |
更新的列數 |
SCHEMA() |
DATABASE() 的同義詞 |
SESSION_USER() |
USER() 的同義詞 |
SYSTEM_USER() |
USER() 的同義詞 |
USER() |
用戶端提供的使用者名稱和主機名稱 |
VERSION() |
傳回表示 MySQL 伺服器版本的字串 |
BENCHMARK()
函數重複執行表達式expr
count
次。它可以用來計時 MySQL 處理表達式的速度。結果值為0
,或對於不適當的引數 (例如NULL
或負數的重複計數) 為NULL
。其預期用途是在 mysql 用戶端中,該用戶端會報告查詢執行時間
mysql> SELECT BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye')); +---------------------------------------------------+ | BENCHMARK(1000000,AES_ENCRYPT('hello','goodbye')) | +---------------------------------------------------+ | 0 | +---------------------------------------------------+ 1 row in set (4.74 sec)
報告的時間是用戶端端的經過時間,而不是伺服器端的 CPU 時間。建議多次執行
BENCHMARK()
,並根據伺服器機器的負載程度來解讀結果。BENCHMARK()
旨在測量純量表達式的執行階段效能,這對您使用它和解讀結果的方式有一些重要的影響只能使用純量表達式。雖然表達式可以是子查詢,但它必須傳回單一資料行,且最多傳回單一列。例如,如果資料表
t
有多個資料行或多列,則BENCHMARK(10, (SELECT * FROM t))
會失敗。執行
SELECT
陳述式expr
N
次與執行SELECT BENCHMARK(
在所涉及的額外負荷量方面有所不同。兩者有非常不同的執行設定檔,您不應預期它們會花費相同的時間。前者會涉及剖析器、最佳化工具、資料表鎖定和執行階段評估,每次都發生N
,expr
)N
次。後者僅涉及執行階段評估N
次,而所有其他元件僅發生一次。已配置的記憶體結構會重複使用,而執行階段最佳化 (例如已針對彙總函數評估的結果的本機快取) 則可能改變結果。因此,使用BENCHMARK()
可透過更重視執行階段元件並移除網路、剖析器、最佳化工具等引入的「雜訊」來測量執行階段元件的效能。
傳回字串引數的字元集,如果引數為
NULL
,則傳回NULL
。mysql> SELECT CHARSET('abc'); -> 'utf8mb3' mysql> SELECT CHARSET(CONVERT('abc' USING latin1)); -> 'latin1' mysql> SELECT CHARSET(USER()); -> 'utf8mb3'
傳回字串引數的校對強制性值。
mysql> SELECT COERCIBILITY('abc' COLLATE utf8mb4_swedish_ci); -> 0 mysql> SELECT COERCIBILITY(USER()); -> 3 mysql> SELECT COERCIBILITY('abc'); -> 4 mysql> SELECT COERCIBILITY(1000); -> 5
傳回值具有下表所示的含義。數值越低,優先順序越高。
強制性 含義 範例 0
明確校對 具有 COLLATE
子句的值1
沒有校對 具有不同校對的字串串連 2
隱含校對 資料行值、儲存的常式參數或本機變數 3
系統常數 USER()
傳回值4
可強制 文字字串 5
數值 數值或時間值 6
可忽略 NULL
或衍生自NULL
的表達式如需詳細資訊,請參閱第 12.8.4 節:「表達式中的校對強制性」。
傳回字串引數的校對。
mysql> SELECT COLLATION('abc'); -> 'utf8mb4_0900_ai_ci' mysql> SELECT COLLATION(_utf8mb4'abc'); -> 'utf8mb4_0900_ai_ci' mysql> SELECT COLLATION(_latin1'abc'); -> 'latin1_swedish_ci'
傳回連線的連線 ID (執行緒 ID)。每個連線都有一個 ID,該 ID 在目前連線的用戶端集中是唯一的。
由
CONNECTION_ID()
傳回的值,與 Information SchemaPROCESSLIST
表格的ID
欄位、SHOW PROCESSLIST
輸出的Id
欄位,以及 Performance Schemathreads
表格的PROCESSLIST_ID
欄位中顯示的值類型相同。mysql> SELECT CONNECTION_ID(); -> 23786
警告變更系統變數
pseudo_thread_id
的會期值,會變更CONNECTION_ID()
函式傳回的值。傳回一個
utf8mb3
字串,其中包含目前會期的現用角色,以逗號分隔;如果沒有現用角色,則傳回NONE
。此值會反映系統變數sql_quote_show_create
的設定。假設一個帳戶被授予的角色如下:
GRANT 'r1', 'r2' TO 'u1'@'localhost'; SET DEFAULT ROLE ALL TO 'u1'@'localhost';
在
u1
的會期中,初始的CURRENT_ROLE()
值會命名預設的帳戶角色。使用SET ROLE
會變更該值。mysql> SELECT CURRENT_ROLE(); +-------------------+ | CURRENT_ROLE() | +-------------------+ | `r1`@`%`,`r2`@`%` | +-------------------+ mysql> SET ROLE 'r1'; SELECT CURRENT_ROLE(); +----------------+ | CURRENT_ROLE() | +----------------+ | `r1`@`%` | +----------------+
傳回伺服器用來驗證目前用戶端的 MySQL 帳戶的使用者名稱和主機名稱組合。此帳戶決定您的存取權限。傳回值為
utf8mb3
字元集中的字串。CURRENT_USER()
的值可能與USER()
的值不同。mysql> SELECT USER(); -> 'davida@localhost' mysql> SELECT * FROM mysql.user; ERROR 1044: Access denied for user ''@'localhost' to database 'mysql' mysql> SELECT CURRENT_USER(); -> '@localhost'
此範例說明,雖然用戶端指定的使用者名稱為
davida
(如USER()
函式的值所示),但伺服器使用匿名使用者帳戶驗證用戶端(從CURRENT_USER()
值的空白使用者名稱部分可見)。發生這種情況的一種方式是,授權表中沒有列出davida
的帳戶。在預存程式或檢視中,除非定義了
SQL SECURITY INVOKER
特性,否則CURRENT_USER()
會傳回定義物件的使用者帳戶(由其DEFINER
值給定)。在後一種情況下,CURRENT_USER()
會傳回物件的調用者。觸發程序和事件沒有定義
SQL SECURITY
特性的選項,因此對於這些物件,CURRENT_USER()
會傳回定義物件的使用者帳戶。若要傳回調用者,請使用USER()
或SESSION_USER()
。以下語法支援使用
CURRENT_USER()
函式來取代受影響使用者或定義者的名稱(以及可能的主機);在這種情況下,CURRENT_USER()
會在需要的地方和時間展開:如需此
CURRENT_USER()
展開對複寫的影響的相關資訊,請參閱 第 19.5.1.8 節,「CURRENT_USER() 的複寫」。此函式可用於
VARCHAR
或TEXT
資料行的預設值,如下列CREATE TABLE
語法所示:CREATE TABLE t (c VARCHAR(288) DEFAULT (CURRENT_USER()));
以
utf8mb3
字元集中的字串形式傳回預設(目前)資料庫名稱。如果沒有預設資料庫,DATABASE()
會傳回NULL
。在預存常式中,預設資料庫是與常式相關聯的資料庫,不一定與呼叫環境中的預設資料庫相同。mysql> SELECT DATABASE(); -> 'test'
如果沒有預設資料庫,
DATABASE()
會傳回NULL
。-
注意
查詢修飾詞
SQL_CALC_FOUND_ROWS
和隨附的FOUND_ROWS()
函式已棄用;預計在未來的 MySQL 版本中將移除它們。請執行帶有LIMIT
的查詢,然後執行第二個帶有COUNT(*)
但不帶LIMIT
的查詢,以判斷是否有其他列。例如,不要使用以下查詢:SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10; SELECT FOUND_ROWS();
請改用以下查詢:
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10; SELECT COUNT(*) FROM tbl_name WHERE id > 100;
COUNT(*)
受限於某些最佳化。SQL_CALC_FOUND_ROWS
會導致停用某些最佳化。SELECT
語法可以包含LIMIT
子句,以限制伺服器傳回給用戶端的列數。在某些情況下,需要知道語法在沒有LIMIT
的情況下會傳回多少列,但無需再次執行語法。若要取得此列計數,請在SELECT
語法中加入SQL_CALC_FOUND_ROWS
選項,然後在之後調用FOUND_ROWS()
:mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10; mysql> SELECT FOUND_ROWS();
第二個
SELECT
會傳回一個數字,表示第一個SELECT
在沒有LIMIT
子句的情況下會傳回多少列。如果在最近成功的
SELECT
語法中沒有SQL_CALC_FOUND_ROWS
選項,FOUND_ROWS()
會傳回該語法傳回的結果集中的列數。如果語法包含LIMIT
子句,FOUND_ROWS()
會傳回限制範圍內的列數。例如,如果語法包含LIMIT 10
或LIMIT 50, 10
,FOUND_ROWS()
分別會傳回 10 或 60。透過
FOUND_ROWS()
可用的列計數是暫時性的,不應在SELECT SQL_CALC_FOUND_ROWS
語法之後的語法中繼續使用。如果您需要在稍後參考該值,請儲存它:mysql> SELECT SQL_CALC_FOUND_ROWS * FROM ... ; mysql> SET @rows = FOUND_ROWS();
如果您使用
SELECT SQL_CALC_FOUND_ROWS
,MySQL 必須計算完整結果集中的列數。但是,這比再次執行沒有LIMIT
的查詢更快,因為結果集無需傳送到用戶端。SQL_CALC_FOUND_ROWS
和FOUND_ROWS()
在您想要限制查詢傳回的列數,但也想在不再次執行查詢的情況下判斷完整結果集中的列數時很有用。一個範例是 Web 腳本,它會呈現分頁顯示,其中包含指向顯示搜尋結果其他部分的頁面的連結。使用FOUND_ROWS()
可讓您判斷其餘結果需要多少其他頁面。對於
UNION
語法,SQL_CALC_FOUND_ROWS
和FOUND_ROWS()
的使用比簡單的SELECT
語法更複雜,因為LIMIT
可能會出現在UNION
中的多個位置。它可以應用於UNION
中的個別SELECT
語法,或整體應用於UNION
結果。UNION
的SQL_CALC_FOUND_ROWS
的目的是傳回不帶全域LIMIT
會傳回的列數。將SQL_CALC_FOUND_ROWS
與UNION
搭配使用的條件如下:僅在使用
UNION ALL
時,FOUND_ROWS()
的值才是精確的。如果使用不帶ALL
的UNION
,則會執行重複刪除,且FOUND_ROWS()
的值僅為近似值。如果
UNION
中沒有LIMIT
,則會忽略SQL_CALC_FOUND_ROWS
,並傳回為了處理UNION
而建立的暫存表中的列數。
除了此處描述的情況之外,
FOUND_ROWS()
的行為是未定義的(例如,在失敗並發生錯誤的SELECT
語法之後的值)。重要使用以語法為基礎的複寫時,
FOUND_ROWS()
無法可靠地複寫。此函式會使用以列為基礎的複寫自動複寫。 用於支援正規表示式操作的 Unicode 國際組件 (ICU) 程式庫版本(請參閱第 14.8.2 節「正規表示式」)。此函式主要用於測試案例。
LAST_INSERT_ID()
、LAST_INSERT_ID(
expr
)若不帶引數,
LAST_INSERT_ID()
會傳回一個BIGINT UNSIGNED
(64 位元) 值,代表最近執行的INSERT
陳述式,針對AUTO_INCREMENT
資料行成功插入的第一個自動產生值。LAST_INSERT_ID()
的值在沒有成功插入任何列時,會保持不變。若帶引數,
LAST_INSERT_ID()
會傳回一個不帶正負號的整數,如果引數為NULL
則傳回NULL
。例如,在插入一列產生
AUTO_INCREMENT
值之後,您可以這樣取得該值mysql> SELECT LAST_INSERT_ID(); -> 195
目前執行的陳述式不會影響
LAST_INSERT_ID()
的值。假設您使用一個陳述式產生一個AUTO_INCREMENT
值,然後在多列INSERT
陳述式中參考LAST_INSERT_ID()
,該陳述式會將列插入到具有其自己AUTO_INCREMENT
資料行的表格中。在第二個陳述式中,LAST_INSERT_ID()
的值會保持穩定;它對於第二列及後續列的值不會受到先前列插入的影響。(您應該注意,如果您混合使用LAST_INSERT_ID()
和LAST_INSERT_ID(
的參考,則效果是未定義的。)expr
)如果先前的陳述式傳回錯誤,則
LAST_INSERT_ID()
的值是未定義的。對於事務性表格,如果由於錯誤而回滾陳述式,則LAST_INSERT_ID()
的值會保持未定義。對於手動ROLLBACK
,LAST_INSERT_ID()
的值不會還原到交易之前的值;它會保持在ROLLBACK
時的值。在儲存常式(程序或函式)或觸發器的主體內,
LAST_INSERT_ID()
的值變更方式與在這些物件主體外部執行的陳述式相同。儲存常式或觸發器對於後續陳述式所看到的LAST_INSERT_ID()
值之影響取決於常式的種類如果儲存程序執行會變更
LAST_INSERT_ID()
值的陳述式,則後續程序呼叫的陳述式會看到變更後的值。對於會變更該值的儲存函式和觸發器,該值會在函式或觸發器結束時還原,因此它之後的陳述式不會看到變更後的值。
產生的 ID 在伺服器中會以每個連線為基礎維護。這表示函式傳回給特定用戶端的值是最近影響
AUTO_INCREMENT
資料行之陳述式所產生第一個AUTO_INCREMENT
值,而該陳述式是由該用戶端所執行。此值不會受到其他用戶端的影響,即使他們產生自己的AUTO_INCREMENT
值也一樣。此行為確保每個用戶端都可以擷取自己的 ID,而無需擔心其他用戶端的活動,也無需鎖定或交易。如果您將列的
AUTO_INCREMENT
資料行設定為非「magic」值(也就是,不是NULL
且不是0
的值),則LAST_INSERT_ID()
的值不會變更。重要如果您使用單一
INSERT
陳述式插入多列,LAST_INSERT_ID()
會僅傳回為第一個插入列產生的值。這樣做的原因是為了使其可以輕鬆地針對其他伺服器重現相同的INSERT
陳述式。例如
mysql> USE test; mysql> CREATE TABLE t ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name VARCHAR(10) NOT NULL ); mysql> INSERT INTO t VALUES (NULL, 'Bob'); mysql> SELECT * FROM t; +----+------+ | id | name | +----+------+ | 1 | Bob | +----+------+ mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ mysql> INSERT INTO t VALUES (NULL, 'Mary'), (NULL, 'Jane'), (NULL, 'Lisa'); mysql> SELECT * FROM t; +----+------+ | id | name | +----+------+ | 1 | Bob | | 2 | Mary | | 3 | Jane | | 4 | Lisa | +----+------+ mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 2 | +------------------+
雖然第二個
INSERT
陳述式在t
中插入了三個新列,但為這些列中的第一個產生的 ID 是2
,而後續SELECT
陳述式所傳回的LAST_INSERT_ID()
就是這個值。如果您使用
INSERT IGNORE
且該列被忽略,則LAST_INSERT_ID()
會保持目前的值不變(如果連線尚未執行成功的INSERT
則會傳回 0),而且對於非交易性表格,AUTO_INCREMENT
計數器不會遞增。對於InnoDB
表格,如果innodb_autoinc_lock_mode
設定為1
或2
,則AUTO_INCREMENT
計數器會遞增,如下列範例所示mysql> USE test; mysql> SELECT @@innodb_autoinc_lock_mode; +----------------------------+ | @@innodb_autoinc_lock_mode | +----------------------------+ | 1 | +----------------------------+ mysql> CREATE TABLE `t` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `val` INT(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `i1` (`val`) ) ENGINE=InnoDB; # Insert two rows mysql> INSERT INTO t (val) VALUES (1),(2); # With auto_increment_offset=1, the inserted rows # result in an AUTO_INCREMENT value of 3 mysql> SHOW CREATE TABLE t\G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `val` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `i1` (`val`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci # LAST_INSERT_ID() returns the first automatically generated # value that is successfully inserted for the AUTO_INCREMENT column mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+ # The attempted insertion of duplicate rows fail but errors are ignored mysql> INSERT IGNORE INTO t (val) VALUES (1),(2); Query OK, 0 rows affected (0.00 sec) Records: 2 Duplicates: 2 Warnings: 0 # With innodb_autoinc_lock_mode=1, the AUTO_INCREMENT counter # is incremented for the ignored rows mysql> SHOW CREATE TABLE t\G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `val` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `i1` (`val`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci # The LAST_INSERT_ID is unchanged because the previous insert was unsuccessful mysql> SELECT LAST_INSERT_ID(); +------------------+ | LAST_INSERT_ID() | +------------------+ | 1 | +------------------+
如需更多資訊,請參閱第 17.6.1.6 節「InnoDB 中的 AUTO_INCREMENT 處理」。
如果將
expr
當作引數提供給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); mysql> SELECT LAST_INSERT_ID();
UPDATE
陳述式會遞增序列計數器,並導致下一次呼叫LAST_INSERT_ID()
時傳回更新後的值。SELECT
陳述式會擷取該值。mysql_insert_id()
C API 函式也可用於取得該值。請參閱 mysql_insert_id()。
您可以在不呼叫
LAST_INSERT_ID()
的情況下產生序列,但以這種方式使用函式的好處是,ID 值會以最後自動產生值的形式維護在伺服器中。它是多使用者安全的,因為多個用戶端可以發出UPDATE
陳述式,並透過SELECT
陳述式(或mysql_insert_id()
)取得自己的序列值,而不會影響或受到產生自己序列值的其他用戶端影響。請注意,只有在
INSERT
和UPDATE
陳述式之後才會更新mysql_insert_id()
,因此您無法在執行其他 SQL 陳述式(例如SELECT
或SET
)之後,使用 C API 函式擷取LAST_INSERT_ID(
的值。expr
)傳回一個包含代表記憶體角色子圖的 GraphML 文件之
utf8mb3
字串。需要ROLE_ADMIN
權限(或已淘汰的SUPER
權限)才能查看<graphml>
元素中的內容。否則,結果只會顯示一個空的元素mysql> SELECT ROLES_GRAPHML(); +---------------------------------------------------+ | ROLES_GRAPHML() | +---------------------------------------------------+ | <?xml version="1.0" encoding="UTF-8"?><graphml /> | +---------------------------------------------------+
ROW_COUNT()
會傳回如下的值DDL 陳述式:0。這適用於
CREATE TABLE
或DROP TABLE
等陳述式。除了
SELECT
之外的 DML 陳述式:受影響的列數。這適用於UPDATE
、INSERT
或DELETE
等陳述式(如先前),但現在也適用於ALTER TABLE
和LOAD DATA
等陳述式。SELECT
:如果陳述式傳回結果集,則為 -1,如果沒有傳回結果集,則為「受影響」的列數。例如,對於SELECT * FROM t1
,ROW_COUNT()
會傳回 -1。對於SELECT * FROM t1 INTO OUTFILE '
,file_name
'ROW_COUNT()
會傳回寫入檔案的列數。SIGNAL
陳述式:0。
對於
UPDATE
陳述式,受影響列的值預設為實際變更的列數。如果您在連線到 mysqld 時,將CLIENT_FOUND_ROWS
旗標指定給mysql_real_connect()
,則受影響列的值為「找到」的列數;也就是說,由WHERE
子句比對的列數。對於
REPLACE
陳述式,如果新列取代了舊列,則受影響列的值為 2,因為在這種情況下,會在刪除重複項之後插入一列。對於
INSERT ... ON DUPLICATE KEY UPDATE
陳述式,每列的受影響列數值為:如果該列是作為新列插入,則為 1;如果現有列被更新,則為 2;如果現有列被設定為其目前的值,則為 0。如果您指定CLIENT_FOUND_ROWS
旗標,則如果現有列被設定為其目前的值,受影響列數值為 1(而不是 0)。ROW_COUNT()
的值與mysql_affected_rows()
C API 函數的值以及 mysql 用戶端在陳述式執行後顯示的列計數相似。mysql> INSERT INTO t VALUES(1),(2),(3); Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | 3 | +-------------+ 1 row in set (0.00 sec) mysql> DELETE FROM t WHERE i IN(1,2); Query OK, 2 rows affected (0.00 sec) mysql> SELECT ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+ 1 row in set (0.00 sec)
重要ROW_COUNT()
無法使用基於陳述式的複寫可靠地複寫。此函數會自動使用基於列的複寫進行複寫。此函數是
DATABASE()
的同義詞。SESSION_USER()
是USER()
的同義詞。與
USER()
類似,此函數可用於VARCHAR
或TEXT
資料行的預設值,如下面的CREATE TABLE
陳述式所示CREATE TABLE t (c VARCHAR(288) DEFAULT (SESSION_USER()));
SYSTEM_USER()
是USER()
的同義詞。注意SYSTEM_USER()
函數與SYSTEM_USER
權限不同。前者會傳回目前的 MySQL 帳戶名稱。後者會區分系統使用者和一般使用者帳戶類別(請參閱第 8.2.11 節「帳戶類別」)。與
USER()
類似,此函數可用於VARCHAR
或TEXT
資料行的預設值,如下面的CREATE TABLE
陳述式所示CREATE TABLE t (c VARCHAR(288) DEFAULT (SYSTEM_USER()));
以
utf8mb3
字元集傳回目前的 MySQL 使用者名稱和主機名稱作為字串。mysql> SELECT USER(); -> 'davida@localhost'
該值表示您在連線至伺服器時指定的使用者名稱,以及您連線的用戶端主機。該值可能與
CURRENT_USER()
的值不同。此函式可用於
VARCHAR
或TEXT
資料行的預設值,如下列CREATE TABLE
語法所示:CREATE TABLE t (c VARCHAR(288) DEFAULT (USER()));
傳回一個字串,表示 MySQL 伺服器版本。該字串使用
utf8mb3
字元集。除了版本號碼外,該值可能還有後綴。請參閱第 7.1.8 節「伺服器系統變數」中version
系統變數的說明。此函數對於基於陳述式的複寫是不安全的。如果您在
binlog_format
設定為STATEMENT
時使用此函數,則會記錄警告。mysql> SELECT VERSION(); -> '9.0.0-standard'