表格 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()
傳回的值,與資訊綱要 (PROCESSLIST
) 資料表中ID
欄位、SHOW PROCESSLIST
輸出的Id
欄位,以及效能綱要 (threads
) 資料表的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
的授權表中沒有列出任何帳戶。在儲存的程式或檢視表中,
CURRENT_USER()
會傳回定義物件的使用者帳戶(如其DEFINER
值所給定的),除非使用SQL SECURITY INVOKER
特性定義。在後一種情況下,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
,而LAST_INSERT_ID()
針對下列SELECT
陳述式傳回的值就是這個值。如果您使用
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
陳述式會擷取該值。C API 函數mysql_insert_id()
也可用於取得值。請參閱mysql_insert_id()。
您可以在不呼叫
LAST_INSERT_ID()
的情況下產生序列,但是以這種方式使用該函數的實用之處在於,ID 值會在伺服器中維護為最後一個自動產生值。由於多個用戶端可以發出UPDATE
陳述式,並透過SELECT
陳述式(或mysql_insert_id()
)取得自己的序列值,而不會影響或受到其他產生自己序列值的用戶端的影響,因此這對多用戶端而言是安全的。請注意,只有在
INSERT
和UPDATE
陳述式之後,才會更新mysql_insert_id()
,因此在執行SELECT
或SET
等其他 SQL 陳述式之後,您無法使用 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(); -> '8.4.0-standard'