| 分類 | 函數 | 示例 | 結果示例 | 應用場景 |
|---|---|---|---|---|
| 版本信息 | VERSION() | SELECT VERSION(); | 8.0.33 | 版本兼容性檢查、升級驗證、腳本適配 |
| CONNECTION_ID() | SELECT CONNECTION_ID(); | 36 | 會話追蹤、死鎖分析、連接洩漏排查 | |
| 上下文環境 | DATABASE() / SCHEMA() | SELECT DATABASE(); | person | 動態SQL構建、多租戶路由驗證 |
| USER() / SYSTEM_USER() / SESSION_USER() / CURRENT_USER() / CURRENT_USER | SELECT USER(); | root@localhost | 權限審計、審計日誌記錄操作用戶 | |
| 字符集 | CHARSET(str) / COLLATION(str) | SELECT CHARSET('中文'); | utf8mb4 / utf8mb4_general_ci | 亂碼排查、編碼一致性驗證 |
| 自增ID | LAST_INSERT_ID() | SELECT LAST_INSERT_ID(); | 3 | **獲取剛插入行的自增主鍵**,業務級聯插入核心 |
USER():客戶端聲明的用戶(連接時指定),含主機名CURRENT_USER():服務端認證後的真實用戶(權限匹配結果),可能不同(如匿名用戶、代理用戶)CURRENT_USER()-- 會話A
INSERT INTO t1 VALUES (NULL); -- id=100
SELECT LAST_INSERT_ID(); -- 100
-- 會話B 並發插入
INSERT INTO t1 VALUES (NULL); -- id=101
SELECT LAST_INSERT_ID(); -- 101 (互不干擾)
本質:會話級變量,非全局。安全用於高併發環境獲取自身插入ID。
SELECT CONNECTION_ID(); -- 當前會話ID
SHOW PROCESSLIST; -- Id列對應,可KILL
#!/bin/bash
VER=$(mysql -Nse "SELECT VERSION();")
CONN=$(mysql -Nse "SELECT COUNT(*) FROM information_schema.PROCESSLIST WHERE COMMAND!='Sleep';")
DB=$(mysql -Nse "SELECT DATABASE();")
echo "版本:$VER 活躍連接:$CONN 當前庫:$DB"
-- JDBC
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) long id = rs.getLong(1); -- 底層調用 LAST_INSERT_ID()
SELECT
@@character_set_database AS db_charset,
@@collation_database AS db_collation,
CHARSET('測試') AS str_charset,
COLLATION('測試') AS str_collation;
系統信息函數是觀測數據庫運行狀態、構建自動化運維、實現業務級聯邏輯的儀表盤,納入監控體系、代碼模板、故障排查手冊,提升運維效能。