以下是对这些 MySQL 函数的总结,包含功能、用法示例和注意事项,方便你理解学习:
1. USER()
函数
- 功能:获取当前登录 MySQL 数据库的用户信息(包含用户名和主机地址,格式一般是
用户名@主机地址
)。 - 示例:
SELECT USER();
-- 假设用 root 用户本地登录,可能返回 root@localhost
- 用途:快速查看当前操作数据库的用户身份,排查权限相关问题(比如确认是不是用错了账号 )。
2. DATABASE()
函数
- 功能:获取当前正在使用(选中)的数据库名称。如果没选数据库(没执行
USE 数据库名
),返回NULL
。 - 示例:
-- 先选中数据库
USE date_functions_test;
SELECT DATABASE();
-- 返回 date_functions_test
- 用途:写通用 SQL 脚本时,动态确认当前上下文的数据库,避免因选错库导致执行错误。
3. MD5(str)
函数
- 功能:对输入的字符串
str
做 MD5 哈希运算,生成一个 32 位的十六进制字符串(常用于简单加密场景,比如用户密码存储,但 MD5 已不太安全,现在更多用更安全的哈希算法 )。 - 示例:
SELECT MD5('123456');
-- 可能返回 e10adc3949ba59abbe56e057f20f883(固定结果,相同字符串 MD5 值固定 )
- 用途:早年常用来存密码(现在推荐用
PASSWORD()
或更安全的加密方式,比如SHA2()
)、生成数据唯一标识(但要注意哈希冲突 )。
4. PASSWORD(str)
函数
- 功能:专门用于 MySQL 数据库内部,对字符串
str
进行加密,生成适合存储在mysql.user
表的密码格式(是 MySQL 自定义的加密逻辑,不同版本可能有差异 )。 - 示例:
-- 模拟给密码 'mypassword' 加密
SELECT PASSWORD('mypassword');
-- 返回类似 *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 这样的加密字符串
- 用途:主要在管理 MySQL 用户、手动设置密码时用(比如直接改
mysql.user
表密码字段 ),但要注意,它是 MySQL 特定的加密方式,通用性差,且不同版本加密逻辑可能不兼容。
5. 补充对比 & 注意事项
函数 |
特点 |
适用场景 |
安全性/注意点 |
|
查当前登录用户 |
权限排查、日志记录 |
无特殊风险,纯信息查询 |
|
查当前选中的数据库 |
脚本动态适配、多库操作 |
没选库时返回 |
|
通用 32 位哈希,结果固定 |
简单加密、生成标识 |
已不算安全,易被暴力破解 |
|
MySQL 专属密码加密 |
手动管理 MySQL 用户密码 |
仅限 MySQL 内部用,通用性极差 |
现在实际开发中,存密码更推荐用 SHA2(str, 256)
这类更安全的哈希,或者结合盐值(salt)加密;PASSWORD()
基本只在运维 MySQL 系统用户时偶尔用到,学习时了解其功能即可~
6. 示例
(1)查看当前登录用户
SELECT USER();
(2)查看当前使用的数据库
SELECT DATABASE(); -- 若未执行 USE,返回 NULL
(3)模拟用户密码存储
SELECT
'user1' AS username,
'password123' AS plaintext_password,
MD5('password123') AS encrypted_password;
(4)验证 MD5 的固定性(相同输入生成相同输出)
SELECT
MD5('hello') AS hash1,
MD5('hello') AS hash2; -- hash1 和 hash2 结果相同
(5)模拟 MySQL 用户密码加密过程
SELECT
'new_password' AS plaintext,
PASSWORD('new_password') AS mysql_encrypted;